process.env.NODE_ENV不匹配'开发'无论

时间:2015-02-22 15:51:12

标签: node.js if-statement express

刚刚迁移到最新的Express上,并且陷入了一些非常简单的事情。 那么,这个蒸馏的例子怎么可能呢?

var env = process.env.NODE_ENV || 'development';
console.log(env);
if ('development' == env) {
    console.log('im here');    
}
else {
    console.log('nah');    
    console.log(env);
}

将此服务器文件作为SET NODE_ENV = development& node server.js

给出输出:

development
nah
development

而不是

development
im here

顺便说一句,如果我只是手动设置var env = 'development',那么它就可以正常工作。

表示4.11.2,节点0.12.0,win8 x64。

4 个答案:

答案 0 :(得分:9)

您的代码看起来很好,因此相等测试必须失败的原因是因为字符串不相等。确保环境变量开发字符串中没有任何额外的字符,如空格。

答案 1 :(得分:8)

我在Windows模式下遇到了同样的问题。我对linux不太确定。这个问题是由word&#34; development&#34;之间的空格引起的。用&#34;&amp;&#34;字符。您可以通过删除命令中的空格来修复。例如:x <- loaded_packages() typeof(x) #need a character vector with package names to pass into function pkgList <- pkgDep(x, availPkgs = pkgdata, suggests=TRUE)`

答案 2 :(得分:0)

同样的问题,我发现使用env.includes('development')可以。

答案 3 :(得分:0)

我尝试按照这里的建议进行操作,但没有任何方法可以摆脱我这个笨拙的空间。

所以我只是在需要使用的地方修剪变量:

require('dotenv').config();

const configSet = () => {
  const envData = process.env;

  console.log('configSet -> process.env', envData);
  console.log('configSet -> envData.NODE_ENV', envData.NODE_ENV);
  const prodOrDevMode = envData.NODE_ENV.trim();

  switch (prodOrDevMode) {
    case 'development':
      envData.TABLE_NAME = envData.DB_TABLE_DEV;
      return envData;

    case 'production':
      envData.TABLE_NAME = envData.DB_TABLE_PROD;
      return envData;

    default:
      throw new Error('Incorrect env setting');
  }
};

const config = configSet();

module.exports = { config };

尤其是可能会引起问题的反馈,我将不胜感激