【问题标题】:NodeJS: How to add routes afterwards (after middleware)NodeJS:之后如何添加路由(中间件之后)
【发布时间】:2017-06-29 19:05:53
【问题描述】:

我目前正在使用 node.js 开发一个项目。 我陷入了一个特定的问题。添加所有路线后 使用 express (app.get("..", func)) 我最终得到了一个中间件 捕获所有请求并重定向到 404 页面。

现在,当我在服务器运行期间添加路由时,中间件 不关心新路线。

示例:

app.get("/home", function(_, res) {
    res.send("home");
})

app.get("/faq", function(_, res) {
    res.send("faq");
})

app.use(function(_, res) {
    res.send("404");
});

// e.g. 10 min later..

app.get("/team", function(_, res) {
    res.send("team");
})

所以我可以访问 /home 和 /faq 但在请求页面 /team 10 分钟后,我被重定向到 404 页面。

有人知道解决办法吗?我对nodejs很陌生..

【问题讨论】:

  • 从您的措辞看来您可能没有尝试重新启动节点/快速进程?
  • 很可能您要添加的路由是在 404 处理程序之后添加的,因此它永远不会到达,因为到达 404 处理程序的任何东西都会收到 404。跨度>
  • 您的 app.use 代码将发送 404 响应,因此之后的所有代码都不会被执行。只需将 app.get("/team", function(_, res) { res.send("team"); }) 留在代码末尾,一切都会好起来的

标签: javascript node.js express middleware


【解决方案1】:

虽然动态添加路由听起来不是一个好主意,但这里有一个解决方法:在 404 处理程序之前添加一个(空的)Router 实例,并将新路由添加到该路由器而不是 app

let router = express.Router();
app.use(router);

app.use(function(_, res) {
    res.send("404");
});

// e.g. 10 min later..
router.get("/team", function(_, res) {
    res.send("team");
})

【讨论】:

  • 由于大厅系统(例如:/lobby/xsfr),我需要动态添加路线。非常感谢!
  • @reByte 听起来你真正需要的是一个接受参数的/lobby 路由,而不是额外的路由。例如,/lobby/:id
  • 是的,我同意@KevinB 的观点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-28
  • 1970-01-01
  • 1970-01-01
  • 2018-02-01
  • 2020-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多