3

目前我正在尝试在运行时删除 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 中正确删除运行时的路由?

非常感谢!

4

1 回答 1

8

您得到的错误是因为路线仍然存在。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),这会更好。

于 2013-02-22T17:26:40.987 回答