process.env.NODE_ENV在config和policy中有两个不同的值

时间:2016-08-22 07:25:18

标签: javascript node.js sails.js

我构建了我在Express应用程序中使用的身份验证中间件。 现在我想为Sails使用相同的中间件。但是,当它在Sails中使用时,我无法从中访问节点env。中间件位于policies/auth.js文件夹下:

var auth = require( 'tb-auth' )( {
  appName: 'test'
} );

module.exports = auth.authenticate;

它被config / policies.js

使用
module.exports.policies = {
   '*': 'auth'
}

中间件代码:

var env = (process.env.NODE_ENV || 'dev');
var config = require( './config/' + env + '.json' );

module.exports = {...};

它总是回到dev。我试图访问sails.config.environment,但它会抛出sails未定义的错误。但是,当我在中间件中访问process.env.NODE_ENV时,它是dev,即使它是" test"在Sails配置文件和应用程序文件中。

编辑:该应用在正确的环境中运行,当我在风帆升降后的主应用文件中console.log(process.env.NODE_ENV)时,我会看到test但同时它会被dev在中间件中未定义(回退到env)。

EDIT2:我刚刚意识到dev等于process.env.NODE_ENV,因为dev等于|| 'dev'(不是因为console.log }),所以如果我在Sails配置的任何部分NODE_ENV test,它是policies/auth.js,但是如果我在dev中控制它。它是optimist < / p>

EDIT3:应用已取消require('sails').lift(require('optimist').argv);

self.arrayPriceList = [NSMutableArray array];
self.dictPriceList = [NSMutableDictionary dictionary];

1 个答案:

答案 0 :(得分:0)

process.env是全局的,您应该能够从节点代码中的任何位置访问它。设置NODE_ENV类型

export NODE_ENV=production
sails lift

NODE_ENV=production sails lift

然后它应该可以访问节点代码中的任何位置,因为进程位于节点的全局对象上。