2016-08-22 16 views
2

Expressアプリケーションで使用する認証ミドルウェアを作成しました。 今私はSails用に同じミドルウェアを使用したいと思います。しかし、Sailsで使用されているときはノードenvにアクセスできません。ミドルウェアはpolicies/auth.jsフォルダの下に住んでいる:process.env.NODE_ENVには、設定とポリシーに2つの異なる値があります

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

module.exports = auth.authenticate; 

そして、それは

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

ミドルウェアコードのconfig/policies.jsで使われています:

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になります。

EDIT:帆後のメインアプリファイル内のI console.log(process.env.NODE_ENV)が、私はしかし、それはミドルウェアに(devへのフォールバックを)未定義のと同じ時間にtestを参照してください持ち上げるときアプリは、正しい環境で実行されます。

EDIT2:は、私はちょうどenvdev(ないため|| 'dev')に等しいdevprocess.env.NODE_ENVために等しくなることに気づいたので、私は帆のどの部分でconsole.logNODE_ENV、私はそれをCONSOLE.LOG場合、それはtestですが、configの場合アプリoptimistで持ち上げられた:policies/auth.jsではdev

EDIT3がある

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 

は、次にそれが、あなたのノードのコード内のどこにでもアクセス可能でなければなりません。

+0

正しい環境で動作します。アプリケーションで 'process.env.NODE_ENV'にログインすると正しい' env'が表示されますが、私がミドルウェアで同じことをするときは未定義です。 –

関連する問題