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

Node.js Remove route while server is running

本文关键字:删除 路由 运行时 服务器 js Node      更新时间:2023-09-26

当前我正在尝试删除运行时的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:无法调用未定义的方法"match"在Router.matchRequest(/var/lib/root/runtime/repo/nod_modules/express/lib/Router/index.js:205:17)

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

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

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

非常感谢!

您得到的错误是因为路由仍然存在。delete不会移除元素,它只会将元素设置为undefined。要移除,请使用拼接(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),这会更好。