Middlewares

Middleware это функция, которая вызывается до обработчиков роута. Middleware функции имеют доступ до объектов request и response в зависимости от фреймворков, и nextmiddleware функцию в цикле 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