想让nodejs能像springboot有yml文件可以区分不同环境的配置,启动使用的时候不需要更改代码。
1.先创建一个config文件夹
2.创建一个index.js,根据启动传入的参数判断加载哪个环境的配置文件,我这里是默认启动生产环境的配置文件
var path = require('path'); console.log(process.env.NODE_ENV) // 通过NODE_ENV来设置环境变量,如果没有指定则默认为生产环境 var env = process.env.NODE_ENV || 'production'; env = env.toLowerCase(); // 载入配置文件 var file = path.resolve(__dirname, env); try { var config = module.exports = require(file); console.log('Load config: [%s] %s', env, file); } catch (err) { console.error('Cannot load config: [%s] %s', env, file); throw err; }
3.分别写一个 test.js 和production.js
module.exports = { sdk : { appid:"123", appsecret:"xxx", redirect_uri:"https://debug.xx.com/node/wechat/userinfo/callback?productId=" }, drainage : { appid:"123", appsecret:"xx", redirect_uri:"https://debug.xx.com/node/wechat/userinfo/callback?productId=" }, redis:{ host:"xxx.xxx.xxx.xx", port:6379, passwd:"muxing123" } };
4.其他文件引用和使用
var config = require('../config'); var redis = require('redis'), RDS_PORT = config.redis.port, //端口号 RDS_HOST = config.redis.host, //服务器IP RDS_PWD = config.redis.passwd, RDS_OPTS = {auth_pass: RDS_PWD}, //设置项 client = redis.createClient(RDS_PORT, RDS_HOST, RDS_OPTS), subClient = redis.createClient(RDS_PORT, RDS_HOST, RDS_OPTS), pubClient = redis.createClient(RDS_PORT, RDS_HOST, RDS_OPTS); client.on('ready', function (res) { console.log('ready'); });
如果参数是变量的使用方式
appid = config[proType].appid appsecret = config[proType].appsecret;
在package.json文件修改scripts,我这里用到了PM2,具体使用自行查阅
"scripts": { "dev": "NODE_ENV=development DEBUG=wechat nodemon ./bin/www --name wechat --watch ", "start": "NODE_ENV=production pm2 start ./bin/www -i 3 --name wechat --watch ", "test": "NODE_ENV=test pm2 start ./bin/www -i 3 --name wechat --watch " }
启动命令
npm start 启动生产环境
npm test 启动测试环境
npm start 、test、 dev 是linux环境下使用的命令