Перейти к содержанию

Посредники (Middlewares)

Интерфейс маршрутизации включает следующих посредников, преобразующих входящий запрос (req):

  • req.cookies — объект, содержащий куки, включенные в запрос (значением по умолчанию является {})
  • req.query — объект, содержащий строку запроса (значением по умолчанию является {})
  • req.body — объект, содержащий тело запроса, преобразованное на основе заголовка Content-Type, или null

Кастомизация посредников

Каждый роут может экспортировать объект config с настройками для посредников:

1
2
3
4
5
6
7
export const config = {
  api: {
    bodyParser: {
      sizeLimit: '1mb',
    },
  },
};
  • bodyParser: false — отключает разбор ответа (возвращается сырой поток данных — Stream)
  • bodyParser.sizeLimit — максимальный размер тела запроса в любом формате, поддерживаемом bytes
  • externalResolver: true — сообщает серверу, что данный роут обрабатывается внешним резолвером, таким как express или connect

Добавление посредников

Рассмотрим добавление промежуточного обработчика cors.

Устанавливаем модуль:

1
yarn add cors

Добавляем cors в роут:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import Cors from 'cors';

// инициализируем посредника
const cors = Cors({
  methods: ['GET', 'HEAD'],
});

// вспомогательная функция для ожидания успешного разрешения посредника
// перед выполнением другого кода
// или для выбрасывания исключения при возникновении ошибки в посреднике
const runMiddleware = (req, res, next) =>
  new Promise((resolve, reject) => {
    fn(req, res, (result) =>
      result instanceof Error
        ? reject(result)
        : resolve(result)
    );
  });

export default async function handler(req, res) {
  // запускаем посредника
  await runMiddleware(req, res, cors);

  // остальная логика `API`
  res.json({ message: 'Всем привет!' });
}

Комментарии