全球化我的节点变量express和route

时间:2017-07-06 13:14:39

标签: node.js express

大家好,所以我有这两个变量我需要它们为我所拥有的每条路线所以我想全局化它们并将它们添加到app.js但是当我这样做时它没有用。

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

我试图将它们添加到我的单独文件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迁移指南,了解有关如何更新应用的详细信息。');

1 个答案:

答案 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路由,这只是另一个中间件。在路线本身内,我们不必指定/cats/whiskers,仅指定/whiskers,因为app仅传递之后路径 {{1}对猫来说。

您可以根据需要嵌套任意数量的路由器。查看this article以获取有关如何执行该操作的良好示例。

假设您只能使用一个路由器