在node啟動的時候我們需要在代碼里面判斷服務器運行環境
可以根據process.env.NODE_ENV來判斷
一、開發環境的判斷
1、安裝 npm i -g cross-env
2、啟動 cross-env NODE_ENV=development node app.js
3、console.log('NODE_ENV:' + process.env.NODE_ENV ); //在代碼里面拿到參數值為development
二、啟動端口的指定
這里指定端口,需要一個commander包來解析參數
1、安裝 npm i commander
2、代碼如下
var program = require('commander');
var http = require("http")
//process.stdin.resume();
//一個指向 標准輸入流(stdin) 的可讀流(Readable Stream)。標准輸入流默認是暫停 (pause) 的,所以必須要調用 process.stdin.resume() 來恢復 (resume) 接收:
process.stdout.write('這里是標准的輸出流\n');
//一個指向標准輸出流(stdout)的 可寫的流(Writable Stream):
//processs參數解析
program
.version("1.3.2")
.option('-c, --config <path>', 'Config file path')
.option('-p, --port <port>', 'Listening port number')
.option('-a, --address <ip>', 'Listening host name or ip')
.option('-b, --blockchain <path>', 'Blockchain db path')
.option('-x, --peers [peers...]', 'Peers list')
.option('-l, --log <level>', 'Log level')
.option('-d, --develop <develop>', 'develop path')
.parse(process.argv);
var server = http.createServer(function(req,res){
res.writeHead(404,{
'Content-Type':'text/html;charset=utf-8'
});
res.write("<p>測試一下</p>");
res.end();
});
// 獲取驗證碼
console.log('NODE_ENV:' + process.env.NODE_ENV );
console.log('program:' + program.develop );
const port = program.port || 3000;
server.listen(port,function(){
console.log('服務器啟動成功!請訪問:http://127.0.0.1:'+port);
});
3、 啟動 node app.js -p 8888 -d dev
其實這個也已經指定了開發環境和端口
最后:也可以采用 cross-env NODE_ENV=development node app.js -p 8888 -d dev
4、如果使用pm2啟動,會導致pm2參數和node啟動的參數混亂問題,所以當使用pm2的時候,一般采用 pm2.json的配置啟動
在項目下新建pm2.json,寫入如下配置
{
"apps" : [{
"name" : "wechat",
"script" : "./bin/www",
"args" : ["-p", "3001"], //node的args參數 等同於 node ./bin/ww -p 30001 其中參數-p和3001,都可以有 process.argv 拿到,process.argv為一個數組
"node_args" : "--harmony", //node harmony模式啟動
"merge_logs" : true,
"cwd":"./",
"log_file": "./log/combined.outerr.log",
"out_file": "./log/out.log",
"error_file": "./log/err.log",
"env": { //node的 env參數, 可以通過 process.env.xxx獲取
"NODE_ENV": "production",
"PORT":3000
}
}]
}
啟動: pm2 start pm2.json
