2016-08-22 198 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',但是當我在中間件中做同樣的事情時,它是未定義的。 –