Node.js 为什么ExpressJs路由器只对所有URL使用文件中的第一条路由?

Node.js 为什么ExpressJs路由器只对所有URL使用文件中的第一条路由?,node.js,express,model-view-controller,routing,Node.js,Express,Model View Controller,Routing,我是node.js的新手,我正在尝试创建一个路由器。我终于让它工作了,但它在将url定向到控制器时只使用module.exports下列出的第一个路由,除非第一个路由是“/about”,在这种情况下它会被忽略,但是,如果我将“/errors”或“/”放在它们呈现的页面的前面(或者,在“/errors”的情况下,它们调用的res.send()),它将显示在每个url上。请解释我的代码有什么问题 /server/routes.js: var express = require('expres

我是node.js的新手,我正在尝试创建一个路由器。我终于让它工作了,但它在将url定向到控制器时只使用module.exports下列出的第一个路由,除非第一个路由是“/about”,在这种情况下它会被忽略,但是,如果我将“/errors”或“/”放在它们呈现的页面的前面(或者,在“/errors”的情况下,它们调用的
res.send()
),它将显示在每个url上。请解释我的代码有什么问题

/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);
};

对于这样的通配符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);
};

此外,最好在函数内部而不是父作用域中创建
路由器,以防导出的函数被多次调用,这可能会导致意外的路由行为。

对于这样的通配符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);
};
此外,最好在函数内部创建
路由器
,而不是父作用域,以防导出的函数被多次调用,从而导致意外的路由行为