【问题标题】:Node.js Remove route while server is runningNode.js 在服务器运行时删除路由
【发布时间】:2013-02-22 15:27:53
【问题描述】:

目前我正在尝试删除一个 运行时的 Node.js 服务器应用程序。

for (k in self.app.routes.get) {
  if (self.app.routes.get[k].path + "" === route + "") {
    delete self.app.routes.get[k];
    break;
  }
}

调用此方法后,self.app.routes 对象中不再存在路由。但是在我尝试访问当前删除的路由后,我收到以下错误:

TypeError:无法调用未定义的方法“匹配” 在 Router.matchRequest (/var/lib/root/runtime/repo/node_modules/express/lib/router/index.js:205:17)

由于 express.js 的文档,这一定是正确的做法。

app.routes 对象包含由关联的 HTTP 动词映射定义的所有路由。此对象可用于自省功能,例如 Express 在内部不仅将其用于路由,而且还提供默认的 OPTIONS 行为,除非使用 app.options()。您的应用程序或框架也可以通过简单地从该对象中删除路由来删除路由。

有没有人知道如何在 Node.js 中正确删除运行时的路由?

非常感谢!

【问题讨论】:

  • 您能确认一下您的 Express 版本吗?
  • 对不起。我的版本是:“3.1.0”

标签: javascript node.js express


【解决方案1】:

您遇到的错误是因为路线仍然存在。 delete 不会删除元素,它只会将元素设置为undefined。移除使用 splice(k,n) (从第 k 个元素中移除 n 项)

for (k in self.app.routes.get) {
  if (self.app.routes.get[k].path + "" === route + "") {
    self.app.routes.get.splice(k,1);
    break;
  }
}

你的路由函数仍然应该处理这个(选择接受哪个路径/url),这样会更好。

【讨论】:

    猜你喜欢
    • 2011-10-22
    • 2022-09-27
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    相关资源
    最近更新 更多