NodeJS - process.env.NODE_ENV条件在使用package.json脚本时不起作用

时间:2016-12-10 10:46:14

标签: javascript node.js

我为测试,开发和生产设置了3个不同的数据库。

现在我希望我的快速应用程序根据我运行的脚本在这些数据库之间切换。

These are my current scripts:
 "scripts": {
    "start": "NODE_ENV=dev && node index.js",
    "test": "mocha --timeout 10000"
  }

我在这样的测试脚本顶部分配process.env.NODE_ENV值,测试脚本对正确的数据库运行良好:

process.env.NODE_ENV = 'test';

但是当我运行npm start时,节点似乎没有获得该值。例如,这段代码:

//数据库连接

let db;
if (process.env.NODE_ENV == 'test') {
  mongoose.connect(config.DB.test, options);
  db = mongoose.connection;
} else if (process.env.NODE_ENV == 'dev') {
  mongoose.connect(config.DB.dev, options);
  db = mongoose.connection;
  app.use(morgan('combined'));
} else if (process.env.NODE_ENV == 'prod') {
  mongoose.connect(config.DB.prod, options);
  db = mongoose.connection;
  app.use(morgan('combined'));
}

db.on('error', console.error.bind(console, 'connection error:'));

我收到Cannot read property 'on' of undefined错误(运行相同的代码,测试脚本连接到正确的数据库)。

我做错了什么?

1 个答案:

答案 0 :(得分:3)

尝试使用此代码:

"start": "NODE_ENV=dev node index.js",

删除&&

我想添加一种方法来处理未设置的env:

var env = process.env.NODE_ENV || 'dev'

然后更改每个引用process.env.NODE_ENVenv