Node.js在服务器运行时删除路由

Rob*_*ndl 3 javascript node.js express

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

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

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

TypeError:无法在Router.matchRequest上调用undefined方法'match'(/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中正确删除运行时的路由?

非常感谢!

use*_*109 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;
  }
}
Run Code Online (Sandbox Code Playgroud)

仍然你的路线功能应该处理这个(选择接受哪个路径/网址),这会更好.