Обычно я бы не стал вызывать промежуточное ПО напрямую из другого промежуточного ПО. Он сочетает в себе функции логики промежуточного программного обеспечения и место использования промежуточного программного обеспечения.
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);
}