2016-09-17 11 views
1

エクスプレス4.xを使用している間、server.jsのポートを次のように設定しています。app.setそしてTypeError:app.getは関数ではありません

var express = require('express'); 
var app = express(); 
... 
var port = process.env.PORT || 8080; 
app.set('port', port); 
... 
module.exports = app; 

しかし、私は次のように、私のルートファイル内でそれにアクセスしようとすると...

// path to routes file is app/models, hence the '../../' 
var app = require('../../server'); 

// default route 
router.get('/', function (req, res) { 
    res.send('Hello! The API is at http://localhost:' + app.get('port') + '/api'); 
}); 

...私は次のエラーを取得します。

TypeError: app.get is not a function 

何が起こっているのですか?

+1

あなたは 'app.address()。port'を試しましたか? – Gary

+0

他のもの:' app.set'はこれらのパラメータに対してのみ使用できます:http://expressjs.com/en/api.html#app.setとhttp ://expressjs.com/en/api.html#app.settings.table – BlackMamba

+0

@BlackMamba明示的な文書で明示的に 'title'という名前のカスタム変数を設定してから検索する例があるため、わかりませんapp.getを使用します。 – Grateful

答えて

3

さて、私はそれを最終的に考え出しました。 appは、以前は​​のserver.jsの後にmodule.exports = appを実行していたため、routesファイル内に正しく設定されていませんでした。ですから、ルートファイルを要求する前にアプリのエクスポートを実行するとすぐにすべてが機能しました!

0

私は何が起こっているのか分かりませんが、この解決策を希望するかどうかわかりません。私はこれと同じような問題が一度ありました。

module.exports = function(app){ 
    //I got access to app.locals 
} 

:私は

var express = require('express'); 
var app = express(); 
.... 
var routes = require("./routes/path") 
routes(app); 

のような何かをしたとルートに私はあなたが "./routes/path" ファイルを持っているところに

のような何かをしたメインファイル内

あなたは私が急行アプリを通過したことを参照してください。

基本的にroutesは、appをパラメータとして受け取る関数です。

私はapp.set( "app"、app)を試しましたが、それはうまくいったとは思いません。

0

アプリが定義されていないようです。このようなものを試すこともできます。

router.get('/', function (req, res) { 
    var app =req.app.get("app") 
    res.send('Hello! The API is at http://localhost:' + app.get("port") + '/api'); 
}); 

https://stackoverflow.com/a/15018006/1893672

+0

なぜ定義されていませんか?私は 'module.exports = app'が推奨されているインターネット上の例を見てきました。では、なぜこのような状況ではうまくいかないのでしょうか? – Grateful

関連する問題