2016-08-22 196 views
2

我已经构建了在我的Express应用程序中使用的身份验证中间件。 现在我想使用相同的Sails中间件。但是,当它在Sails中使用时,我无法从中访问节点env。中间件住policies/auth.js文件夹下:process.env.NODE_ENV在配置和策略中有两个不同的值

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时,即使它在Sails配置文件和应用程序文件中“测试”,它也是dev

编辑:该应用程序在正确的环境中运行,当帆后的主应用程序文件I console.log(process.env.NODE_ENV)解除我看到test但是在它的不确定(回退到dev)在中间件同一时间。

EDIT2:我刚刚意识到env等于dev因为process.env.NODE_ENV等于dev(不是因为|| 'dev'),所以,如果我console.logNODE_ENV在帆的任何部分配置是test但如果我是CONSOLE.LOG在policies/auth.jsdev

EDIT3:应用与optimist提升:

require('sails').lift(require('optimist').argv); 
+1

你可以访问它(否则你会得到一个错误消息),但'NODE_ENV'似乎是未定义的。 – str

+0

NODE_ENV在风帆中没有合理的原因。你可以尝试在你的第一个控制台日志之后将它设置为任何字符串,并让我们知道你以后是否仍然在你的模块中获得'dev'。 –

+0

@ChristopheAugier无论我分配给它的值如何,它始终是'policies'文件夹中的'dev',并且在'config'文件夹中始终具有正确的值 –

回答

0

process.env是全球性的,您应该可以从节点代码中的任何位置访问它。设置你的NODE_ENV

export NODE_ENV=production 
sails lift 

NODE_ENV=production sails lift 

那么它应该是在您的节点代码的任何地方accessable,因为工艺节点的全局对象。

+0

它在正确的环境中运行。当我在应用程序中登录'process.env.NODE_ENV'时,它显示正确的'env',但是当我在中间件中做同样的事情时,它是未定义的。 –