app.use
で追加されたミドルウェアをスタックから削除するための標準的な方法はありますか?それはshould be possible to just modify the app.stack
array directlyだと思われますが、最初に検討しなければならない文書化された方法があるかどうかは疑問です。Expressスタックからミドルウェアを削除する適切な方法はありますか?
答えて
use
は実際にはConnect(Expressではない)から来て、all it really does is push the middleware function onto the app's stack
です。
したがって、関数を配列から正しくスプライスするだけでよいはずです。
ただし、app.stack
のドキュメントはありません。また、ミドルウェアを削除する機能もありません。将来のバージョンのConnectがコードと互換性のない変更を行うリスクがあります。
にあるか、またはあなたのコードと互換性のない 'express 'を変更しています。 'express'はもはや' connect'に依存しないので、私はこれがもう動作しないと思います。 – trysis
これを行う方法は組み込まれていないようですが、小さなトリックで同じ結果を得ることができます。独自の配列のミドルウェア(dynamicMiddleware
と呼ぶ)を作成しますが、それをExpressにプッシュしないで、dynamicMiddleware
のすべてのハンドラを非同期で順番に実行するミドルウェアを1つだけ押します。私は今それをテストする機会を持っていないよう
const async = require('async')
// Middleware
const m1 = (req, res, next) => {
// do something here
next();
}
const m2 = (req, res, next) => {
// do something here
next();
}
const m3 = (req, res, next) => {
// do something here
next();
}
let dynamicMiddleware = [m1, m2, m3]
app.use((req, res, next) => {
// execute async handlers one by one
async.eachSeries(
// array to iterate over
dynamicMiddleware,
// iteration function
(handler, callback) => {
// call handler with req, res, and callback as next
handler(req, res, callback)
},
// final callback
(err) => {
if(err) {
// handle error as needed
} else {
// call next middleware
next()
}
}
);
})
コードが少し荒いですが、考え方は明確にする必要があります。arrayを通じて1つのミドルウェア内のすべての動的なハンドラの配列、その意志ループを包みます。配列にハンドラーを追加または削除すると、配列に残っているものだけが呼び出されます。
私が知る限り、ミドルウェアを削除する方法はありません。ただし、ブール値フラグを割り当てて、いつでもミドルウェアを「非アクティブ化」することができます。
var middlewareA_isActivate = true;
//Your middleware code
function(req, res, next) {
if (!middlewareA_isActivate) next();
//.........
}
//Deactivate middleware
middlewareA_isActivate = false;
EDIT:
ExpressJs(4.xの)コードを読んだ後、私はあなたがミドルウェアがapp._router.stack
スタックビアアクセスできることがわかり、操作は私が推測する、そこから行きます。しかし、私はこの「秘密」が将来的には機能しないかもしれないと考えています
P/s:ミドルウェアスタックを直接操作する際にExpressがどのように動作するかはテストされていません
- 1. UITableViewから区切り線を削除する方法はありますか?
- 2. ファイルからのデータ削除を管理する適切な方法はありますか?
- 3. ダイナミックアレイを削除する適切な方法は何ですか?
- 4. 削除アクションのユーザー再送信を処理する適切な方法はありますか?
- 5. gitコミットを選択的に削除する適切な方法はありますか?
- 6. ハローキャスティングクラスタから不正なノードを削除する方法はありますか?
- 7. 同期リストから要素を削除する適切な方法
- 8. ブートストラップ構築されたウェブサイトから適切なスペースを削除する方法
- 9. has_manyを削除する適切な方法:joinレコードを使用しますか?
- 10. JavaScriptからテーブルの適切な行を削除します
- 11. laravelから#symbolを削除する方法ページ区切りurl
- 12. 多対多接続を削除する適切な方法は何ですか?
- 13. サービスファブリックでサービスを削除する適切な方法は何ですか?
- 14. Express 4ミドルウェアからコントローラクラスにアクセスする方法は?
- 15. Hadoop-Hiveからテーブルを削除/切り捨てる方法は?
- 16. NavigationスタックからViewControllerを削除する方法。返信するオプションはありません。Swift
- 17. React native:ListVIewから適切なアイテムを削除する
- 18. は、vstsのユーザーストーリーからコメントを削除する方法はありますか?
- 19. Sql Server Expressには適切な頭字語がありますか?
- 20. _idプロパティを削除しなくてもExpressとMongooseでドキュメントを更新する方法はありますか?
- 21. Android:スタックからアクティビティを削除する
- 22. 大きなワークフロープロセス履歴スタックを簡単に削除する方法はありますか?
- 23. PostgreSQLからテンプレートデータベースを削除する方法はありますか?
- 24. ページメソッドから静的宣言を削除する方法はありますか?
- 25. pubnubアプリからデバイスを削除する方法はありますか?
- 26. キューからアイテムを削除する方法はありますか?
- 27. クッキーから情報を削除する方法はありますか?
- 28. phpのURLからフォルダ名を削除する方法はありますか?
- 29. javascriptオブジェクトからオブジェクト名を "削除"する方法はありますか?
- 30. 「ビジネスロジック」レイヤーから「GUI」レイヤーを削除する方法はありますか?
*適切な方法は不要なミドルウェアを追加することではありません。 – elmigranto
@elmigrantoそれはあまりにも単純な見方です。特定の場合にミドルウェアの追加/削除が必要な場合がある、より動的な方法でExpressルーティングを使用する理由がたくさんあります。 – Brad
ミドルウェアスタックがapp._router.stack – rocketspacer