为什么ExpressJs路由器只在文件中使用所有URL的第一个路由?

时间:2017-05-28 18:13:21

标签: node.js express model-view-controller routing

我是node.js的新手,我正在尝试创建一个路由器。我终于让它工作了,但它只是使用我在list.exports下列出的第一条路径,当一个url指向一个控制器,除非第一条路线是' / about',在这种情况下它是忽略了,但是,如果我把' /错误'或者' /'首先,他们呈现的页面(或者,在' / errors',他们调用的res.send()),它将显示在每个网址上。请解释我的代码有什么问题。

/server/routes.js:

   var express = require('express');
    router = express.Router(),
    users = require('../controllers/users'),
    errors = require('../controllers/errors');
    home = require('../controllers/home')
module.exports = function(app) {
    router.get('/about', home.about);
    router.get('/', users.new);
    router.get('*', errors.four);
    app.use('/*', router);
};

1 个答案:

答案 0 :(得分:0)

对于像这样的通配符URL,您通常不需要指定路径(这也应该更快一些,因为Express不必进行路径解析/检查)。例如:

module.exports = function(app) {
  var router = express.Router();
  router.get('/about', home.about);
  router.get('/', users.new);
  router.get(errors.four);
  app.use(router);
};

如果导出的函数被多次调用,那么在函数内部而不是父作用域中创建router会更好,这可能会导致意外的路由行为。