Middlewares
Middleware это функция, которая вызывается до обработчиков роута. Middleware функции имеют доступ до объектов request и response в зависимости от фреймворков, и next
middleware функцию в цикле request-response.
Функция next middleware по умолчанию представлена переменнойnext
.
Пример:
Для примера middleware которая выводит тело запроса на сервер в терминал - выглядит как:
const loggerMiddleware = (req, res, next) => {
console.log(req.body);
next();
};
module.exports = loggerMiddleware;
Внедрение middleware
Вам нужно добавить middleware в хранилище ROUTER в файле вашего модуляindex.js
.
const simpleMiddleware = (req, res) => {
console.log(req.headers);
next();
};
ROUTER.set('middlewares', { simpleMiddleware });
Кроме того, вы можете прикрепить ACTIONS, просто добавив небольшую оболочку для инициализации middleware.
const simpleMiddleware = (ACTIONS) => (req, res) => {
ACTIONS.send('event')
.then((info) => console.log(info));
.catch((warning) => console.log(warning));
next();
};
ROUTER.set('middlewares', { simpleMiddleware(ACTIONS) });
Middleware слои
Иногда вам нужно изменить порядок віполнения ваших middlewares. Для того чтобы это сделать вам нужно передать дополнительный аттрибут в метод ROUTER "set".
ROUTER.set('middlewares', { someMiddleware }, n);
Где n - это число порядка middleware слоя. Это работает как "z-index" html аттрибут, просто назначте ваш middleware в слой нужного порядка относительно остальных.
По умолчанию все middlewares находятся в "нолевом слое".
Прикрепить middleware к роуту
Часто вы хотите вызвать какой-то middleware только перед некоторыми роутами. Вы можете сделать это, просто добавив к роутам внутри config.json
специальный ключ «middleware» значение которого должно содержать имя middleware:
"routes": {
"users_auth": {
"path": "users/auth",
"method": "get",
"middleware": "authMiddleware"
}
},
После этого вам нужно добавить middleware в ROUTER со специальным строковым параметром 'routes'.
ROUTER.set('middlewares', {
authMiddleware: authMiddleware(ACTIONS),
}, 'routes');
Last updated
Was this helpful?