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 で undefined のメソッド 'match' を呼び出せません (/var/lib/root/runtime/repo/node_modules/express/lib/router/index.js:205:17)

Express.js のドキュメントにより、これは正しい方法である必要があります。

app.routes オブジェクトには、関連付けられた HTTP 動詞によってマップされた定義済みのすべてのルートが格納されています。このオブジェクトは、イントロスペクション機能に使用できます。たとえば、Express はルーティングのためだけでなく、 app.options() が使用されない限り、デフォルトの 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 に答える