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

标签 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;
  }
}

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

TypeError: Cannot call method 'match' of undefined at Router.matchRequest (/var/lib/root/runtime/repo/node_modules/express/lib/router/index.js:205:17)

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

The app.routes object houses all of the routes defined mapped by the associated HTTP verb. This object may be used for introspection capabilities, for example Express uses this internally not only for routing but to provide default OPTIONS behaviour unless app.options() is used. Your application or framework may also remove routes by simply by removing them from this object.

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

非常感谢!

最佳答案

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

关于javascript - Node.js 在服务器运行时删除路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15027514/

相关文章:

java - 如何以系统时间间隔15分钟从数据库获取数据?

javascript - 如何使用 Promise 填充层次结构,其中每个级别都需要满足前一个级别?

node.js - 应如何在backbone.js 中初始化页面,以最大限度地减少 HTTP 请求和延迟

mysql - 我无法在我的服务器 Express Js 中恢复 id 以在我的 BD 中删除

javascript - 从 JavaScript 保存文件并设置自定义名称

javascript - 是否有一个库在图像上粘贴放大/缩小按钮并允许增量 + 和 -

javascript - 安装和使用 Node JS

mysql - POST 表单数据到 Express App 成功,使用 sequelize 插入 MySQL 数据库

javascript - 无法聚焦使用 JS 创建的输入

arrays - MongoDb 从数组中选择对象属性与条件匹配的对象