2017-07-06 29 views
0

你好傢伙,所以我有這兩個變量,我要求他們的每條路線我有,所以我想全球化他們,只是將它們添加到app.js但是當我這樣做,工作。全球化我的節點變量快速和路由

var express = require('express'); 
var router = express.Router(); 

我試圖ADDD他們在我的單獨的文件config.js,然後我需要在我的路線,並將其分配給變量,並使用它,但它無法正常工作。

我的配置文件看起來像這樣

/** 
* Module dependencies. 
*/ 
var express = require('express'), 
    favicon = require('serve-favicon'), 
    logger = require('morgan'), 
    bodyParser = require('body-parser'), 
    methodOverride = require('method-override'), 
    errorHandler = require('errorhandler'), 
    path = require('path'); 



module.exports = function() { 
    var app = express(); 
var router = app.Router(); 


    return app; 
}(); 

我得到這個錯誤的所有時間: 拋出新的錯誤(「\」 app.router \」已過時\ n請參見3.X到4! .x遷移指南瞭解如何更新您的應用的詳細信息。

+0

你是否嘗試過不使用app.Router()這樣的錯誤說? –

+0

另外,要求他們在所有的路由器是不是真的是一個問題 –

回答

1

TLDR:您router變量是路由器的一個實例,並應該裏面每個路徑的文件進行初始化。我可以欣賞試圖儘可能地幹,但以這種方式來做就不會按照你期望的那樣工作。您可以通過編寫這種方式節省一點打字:

var router = require('express').Router(); 

較長的解釋是,使用多路由,需要爲每個路由的路由器。這有助於將與請求相關聯的整個路徑(即/bar/foo/baz)分解爲更易於管理的塊。

假設您的路徑可以從/cats/dogs開始。在聲明的所有中間件的文件,你可以寫:

var catRoute = require(./routes/cats) 
var dogRoute = require(./routes/dogs) 

app.use('/cats', catRoute) 
app.use('/dogs', dogRoute) 

然後,裏面cats.js

var router = require('express').Router(); 
router.get('/whiskers', (req, res) => { 
    res.send('Cat whiskers!') 
} 
module.exports = router; 

這樣做是告訴應用程序,如果它得到的路徑開始/cats,使用貓的路線,這只是另一箇中間件。在路線本身內,我們不必指定/cats/whiskers,只需要/whiskers,因爲app僅向/cats傳遞給貓的路徑部分

您可以根據需要嵌套儘可能多的路由器。查看this article是一個很好的例子。

假設你只能使用一個路由器

+0

謝謝你所寫的是完全正確的,它應該工作,但我得到一個錯誤「TypeError:循環__proto__值」 我要離開它如此令人不愉快的代碼 –

+0

聽起來像某處有循環依賴。您可能需要重構代碼,以避免出現相互需要的文件。不要放棄!可以有一個非常陡峭的節點學習曲線,具體取決於你的背景。你可以看看Github上的一些示例應用程序,如[this](https://github.com/jbaumbach/nodejs-scaffolding)或者看看[快遞生成器](https://github.com/petecoop/generator-express) –