Маршрутизация NextJS api с помощью HTTP-глаголов


ВНИМАНИЕ

Этот пост был написан в мае 2022 года, на данный момент NextJS находится на 12 версии и, до сих пор, не существует нативного способа решения этой проблемы. Если вы будете читать это в будущем, не забудьте заглянуть в официальную документацию по фреймворку и посмотреть, нет ли там более современных решений.

Создание конечной точки API в NextJS чрезвычайно просто, но если вам когда-либо приходилось иметь дело с более чем одним HTTP-глаголом в одном маршруте, вы поймете, что вам нужно организовать все так, чтобы не запутаться.

Проблема в том, что NextJS не предоставляет встроенного способа маршрутизации запросов по HTTP-глаголам, только по PATH запроса.

На рынке есть некоторые библиотеки, которые добавляют некоторый супермощный потенциал этим apis, но в большинстве сценариев вам не нужно так много мощности, просто отделите функцию, которая обрабатывает GET, от той, которая обрабатывает POST, например.

В этом контексте у меня есть помощник, который я обычно использую, который решает эту проблему очень элегантным способом, на мой взгляд.

//helper/verbs-route.js
export function verbsRouter(router) {
  const sanitizedVerbs = {};
  Object.keys(router).forEach((verb) => {
    sanitizedVerbs[verb.toLowerCase()] = router[verb];
  });

  return (req, res) => {
    const method = req.method.toLowerCase();
    const route = sanitizedVerbs[method];
    if (!route || typeof route !== 'function') {
      return res.status(405).end();
    }

    return route(req, res);
  };
}
Войдите в полноэкранный режим Выход из полноэкранного режима

И все! =)

Вот как я его использую:

//pages/api/my-api.js
import { verbsRouter } from '../../helper/verbs-route.js'

export default verbsRouter({

  async get (req, res) {
  },

  async post (req, res) {
  },

  async put (req, res) {
  },

  async delete (req, res) {
  },

})
Войдите в полноэкранный режим Выход из полноэкранного режима

Вот и все. Без добавления зависимостей, с несколькими строками кода, у вас есть маршрутизатор HTTP глаголов для ваших apis.

Оцените статью
Procodings.ru
Добавить комментарий