Несмотря на то, что в expressjs нет встроенной системы фильтров промежуточного программного обеспечения, вы можете достичь этого, по крайней мере, двумя способами.
Первый способ смонтировать все промежуточное программное что вы хотите, чтобы перейти к обычному пути выражения, чем включает в себя отрицательный поиск:
// Skip all middleware except rateLimiter and proxy when route is /example_route
app.use(/\/((?!example_route).)*/, app_lookup);
app.use(/\/((?!example_route).)*/, timestamp_validator);
app.use(/\/((?!example_route).)*/, request_body);
app.use(/\/((?!example_route).)*/, checksum_validator);
app.use(rateLimiter);
app.use(/\/((?!example_route).)*/, whitelist);
app.use(proxy);
Второй метод, вероятно, более удобным для чтения и чище один, чтобы обернуть промежуточное программное обеспечение с небольшая вспомогательная функция:
var unless = function(path, middleware) {
return function(req, res, next) {
if (path === req.path) {
return next();
} else {
return middleware(req, res, next);
}
};
};
app.use(unless('/example_route', app_lookup));
app.use(unless('/example_route', timestamp_validator));
app.use(unless('/example_route', request_body));
app.use(unless('/example_route', checksum_validator));
app.use(rateLimiter);
app.use(unless('/example_route', whitelist));
app.use(proxy);
Если вам нужно более мощное согласование маршрута, чем простой path === req.path
вы можете использовать path-to-regexp module, который используется внутри Express.
Для этой цели вы можете использовать выражение «если только» npm. –