我为测试、开发和生产设置了 3 个不同的数据库。
现在我希望我的 express 应用根据我运行的脚本在这些数据库之间切换。
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
时,node 似乎没有得到值。例如这段代码:
//数据库连接
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
错误(在使用测试脚本运行相同代码时连接到正确的数据库)。
我做错了什么?
最佳答案
尝试改用它:
"start": "NODE_ENV=dev node index.js",
删除&&
我想添加一种方法来处理未设置的环境:
var env = process.env.NODE_ENV || 'dev'
然后将每个引用 process.env.NODE_ENV
更改为 env
关于javascript - NodeJS - 使用 package.json 脚本时 process.env.NODE_ENV 条件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41074639/