2016-09-17 35 views
1

在使用Express 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我對此不太確定,因爲express文檔明確給出了一個設置名爲'title'的自定義變量的示例,然後檢索它使用app.get。 – Grateful

回答

3

好吧,我終於想通了。 app未在路由文件中正確設置,因爲我們之前在server.js中的​​之後執行了module.exports = app。所以只要我移動應用程序的出口發生在需要的路線文件之前...一切正常!

0

我不知道到底發生了什麼,我不知道你是否想要這個解決方案。我曾經有過類似的問題。

主文件,我沒有

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

和路線我不喜歡的東西

在你有 「./routes/path」 文件:

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

你看我傳遞了快速應用程序。

基本上路由是一種以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

相關問題