3 回答

TA貢獻2041條經驗 獲得超4個贊
通常我不會直接從另一個中間件調用中間件。它混合了中間件邏輯的職責和使用中間件的位置。
Express 的可配置性比您想象的要高得多。您還可以在公共路徑中安裝公共中間件:
如果所有路由都使用中間件:
// How common middlewares are normally installed:
app.post(middleware1);
app.post(middleware2);
app.post(middleware3);
app.post(middleware4);
// Alternative, less common way to do it:
app.post(middleware1,middleware2,middleware3,middleware4);
如果只有特定的 url模式使用中間件:
// Use a regexp:
app.post(/route(1|2)/, middleware1, middleware2, middleware3, middleware4);
// Or if you don't like regexp, use globs:
app.post('route*', middleware1, middleware2, middleware3, middleware4);
// Or a more specific glob pattern:
app.post('route1?2?', middleware1, middleware2, middleware3, middleware4);
如果子路徑中的所有 url 都使用中間件。例如,假設所有 url 都/route/...使用中間件:
const route = express.Router();
app.use('/route',route);
route.post(middleware1);
route.post(middleware2);
route.post(middleware3);
route.post(middleware4);
如果以上都不吸引你,你仍然可以使用你的第二個選項,但不是在彼此內部調用中間件,而是編寫一個中間件來初始化中間件:
function commonMiddlewares (req, res, next) {
middleware1(req,res,function() {
middleware2(req,res,function() {
middleware3(req,res,function() {
middleware4(req,res,next);
});
});
});
}
可以用較少嵌套的方式編寫:
function commonMiddlewares (req, res, next) {
function runMiddleware4 () {
middleware4(req,res,next);
}
function runMiddleware3 () {
middleware3(req,res,runMiddleware4);
}
function runMiddleware2 () {
middleware2(req,res,runMiddleware3);
}
middleware1(req,res,runMiddleware2);
}

TA貢獻1847條經驗 獲得超11個贊
const express = require('express')
const { routesMiddleware } =require('./middlewares')
const { pureVaidationsFunctions1 } =require('./services')
const rout1 =express.Router()
const rout2 =express.Router()
const app = express()
app.use('/route1',route1)
app.use('/route2',route2)
// routesMiddleware a middleware to handle the execution of list of functions
// pureVaidationsFunctions1 list of funtions that `routesMiddleware` will consume
route1.post(routesMiddleware(pureVaidationsFunctions1))
route2.post(routesMiddleware(pureVaidationsFunctions2))
有道理?

TA貢獻1815條經驗 獲得超13個贊
您可以指定多個中間件,請參閱app.use 文檔:
以上任何一項的組合數組。
您可以創建所有中間件的文件,例如 -
中間件.js
module.exports = [
function(req, res, next){...},
function(req, res, next){...},
function(req, res, next){...},
.
.
.
function(req, res, next){...},
]
然后簡單地添加它:
/*
you can pass any of the below inside app.use()
A middleware function.
A series of middleware functions (separated by commas).
An array of middleware functions.
A combination of all of the above.
*/
app.use(require('./middlewares.js'));
注意 - 僅對所有此類請求通用的中間件執行此操作。
添加回答
舉報