【问题标题】:Express Router: everything route that allows new routes快速路由器:允许新路由的所有路由
【发布时间】:2016-09-22 17:06:50
【问题描述】:

由于 express 会按照添加的顺序评估路由,因此您应该将更具体的路由放在首位。

server.get('/product/:id', router.getProduct);
server.get('/user/:id', router.getUser);
server.get('*', router.notFound);

但是,网站的管理方面需要能够创建新部分。创建新部分时,会将其添加到数据库中,然后创建新路线。但是,* 路由捕获了所有内容,并被添加到新的部分路由之前。因此,新的部分路线永远不会匹配。

如果我删除 * 路由,那么新的部分路由会匹配。我的问题是如何在不使用 * 路由的情况下创建匹配 404 请求的路由。或者有没有办法在路由匹配顺序的末尾添加始终匹配的路由?

任何帮助表示赞赏。

【问题讨论】:

  • 部分 URL 是如何命名的?或者这完全是任意的?
  • 嗯,这必须由管理员决定,所以是的,他们可以输入任何他们喜欢的内容。至少是这样的想法。也许解决方案是重新配置路由的命名方式?

标签: node.js express routing


【解决方案1】:

由于部分可以有任意名称,您可以在 catch-all 处理程序中检查它们的有效性。这将取决于您的代码是如何设置的,但要给出一个想法:

server.get('/product/:id', router.getProduct);
server.get('/user/:id', router.getUser);
server.get('*', function(req, res, next) {
  let sectionName = req.url.substring(1);
  Sections.findByName(sectionName, (err, section) {
    // Pass errors to the generic error handler.
    if (err) return next(err);

    // If the section isn't known, pass it along.
    if (! section) return next();

    // Perform the section code here.
    ...
  });
});
server.use(router.notFound);

换句话说:get('*') 路由将获取请求的路径,删除前导斜杠(除非它是部分名称的一部分),在数据库中查找它,并处理错误或未知的部分名称。

最终处理程序将为通过部分处理程序的请求生成 404。

【讨论】:

    【解决方案2】:

    此处描述了 4xx/5xx 错误处理 - http://expressjs.com/en/guide/error-handling.html

    【讨论】:

      猜你喜欢
      • 2016-10-03
      • 2019-01-13
      • 2018-09-27
      • 1970-01-01
      • 2017-02-26
      • 1970-01-01
      • 2018-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多