2017-07-06 36 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) –