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

标签 javascript node.js

我为测试、开发和生产设置了 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/

相关文章:

javascript - 响应式相对元素调整大小+响应式文本覆盖

javascript - ajax 函数成功事件时关闭 webview

node.js - React-Router 和 Meteor 无法在刷新时使用参数渲染路由

Node.js - 监控数据库的变化

node.js - 尝试在 Heroku 上部署 Node.js/Express/Socket.io 应用程序时出现应用程序错误

javascript - 使用 AJAX 检查用户名可用性

javascript - 确保两个处理程序按特定顺序完成

node.js - Passport js 使用sequelize进行本地身份验证

javascript - 未捕获的语法错误 : missing ) after argument list using AngularJS

node.js - 如何调试 Node 套接字: ECONNRESET exception