2017-09-12 8 views
0

私は現時点でexpressjsでWebアプリケーションを作成しています。私が実行した場合app.set変数にアクセスできません。

callingScript.js

const http = require('http'); 
const app = require('./module'); 

const port = process.env.PORT || 3000; 

app.set('port', port); 

const server = http.createServer(app); 

// it serves to the correct port, so the problem is passing it to module.js 
app.listen(port); 

module.js

const express = require('express'); 

const app = express(); 

// this always logs `undefined` 
console.log(app.get('port')); 

module.exports = app; 

私はアプリがmodulecallingScriptから実行されているポートを通過したいです上記のアプリケーション私はresuを見たい

$ node callingScript.js 
3000 
$ PORT=8080 bash -c 'node callingScript.js' 
8080 

ですが、代わりにundefinedが毎回印刷されます。

module.jsが呼び出し元のスクリプトから変数を渡されていないようです。

どうすれば2つの間でポートを通過できますか?

+0

あなたは '.set()'を呼び出す前に '.get()'を呼び出しています。 – robertklep

+0

@robertklepしかし、どうすればそのポートを通過できますか? – theonlygusti

+0

'const port = process.env.PORT ||を宣言する3000; '' require 'の前に '' callingScript.js'モジュールの一番上にあります。 – alexmac

答えて

0

あなたは間違った時刻にログインしています。 最初にmodule.jsが実行されます。があります。callingScript.jsが実行されます。 app.getconsole.logは、module.jsにあり、の前には、app.setcallingScript.jsになります。


あなたはmodule.jsのコードで設定されたポートで何かをしたい場合は、ちょうどあなたがポートを設定した後、そのコードを呼び出すことを確認します。その後、

const express = require('express'); 

const app = express(); 

module.exports = { 
    app, 
    foo: function() { 
     console.log("The port is " + app.get("port")); 
    } 
}; 

それを呼び出す:たとえば、ここではfooが関数の両方appfoo、持つオブジェクトをエクスポートすることはあなたが作るしたい場合がありますように聞こえる、と述べ

const http = require('http'); 
const m = require('./module'); 

const port = process.env.PORT || 3000; 

m.app.set('port', port); 
m.foo(); // <==== 

const server = http.createServer(m.app); 

// it serves to the correct port, so the problem is passing it to module.js 
m.app.listen(port); 

あなたモジュールは、ポートを受け入れ、そのポートを使用するように構成されたapp(ポートの内容を知る必要がある他のものとともに)を返す関数を公開します。

+0

これを修正して、 'port'を渡したいのですが? – theonlygusti

+0

@theonlygusti:あなたはあなたがいないと思うのはなぜですか? 'createServer'を呼び出す前にポートを設定しているので、設定したポートで待ち受けます。 'module.js'に' app.set'を呼び出した後に*を呼び出したコードがあり、そのコードが 'app.get'を使用していた場合、あなたが設定した値が表示されます。 –

+0

'app.set'の後に*実行する' module.js'のコードは、 'app.get'に更新された値を表示します。 –

関連する問題