Для обработки запросов CORS (Cross-Origin Resource Sharing) в Next.js при отправке запросов API на другой домен, можно использовать несколько подходов:

  1. Настройка сервера или API endpoint

На сервере или API endpoint, который получает ваши запросы, необходимо настроить заголовки CORS, чтобы разрешить запросы с домена вашего Next.js приложения. Например, если вы используете Express.js, вы можете добавить middleware для обработки CORS:

const express = require("express");
const cors = require("cors");
const app = express();
 
app.use(
  cors({
    origin: "https://your-nextjs-app-domain.com",
    methods: ["GET", "POST", "PUT", "DELETE"],
    allowedHeaders: ["Content-Type", "Authorization"],
  }),
);
 
app.listen(3000, () => {
  console.log("Server is running on port 3000");
});
  1. Использование serverless функций в Next.js как прокси

Вы можете создать serverless функцию в Next.js, которая будет выступать в качестве прокси для ваших запросов. Это позволяет обойти ограничения CORS, так как запросы будут исходить от сервера Next.js, а не от клиента.

Создайте файл pages/api/proxy.js:

export default async function handler(req, res) {
  const { method, body } = req;
  const url = "https://external-api-domain.com/endpoint";
 
  const response = await fetch(url, {
    method,
    headers: {
      "Content-Type": "application/json",
      Authorization: req.headers.authorization || "",
    },
    body:
      method === "POST" || method === "PUT" ? JSON.stringify(body) : undefined,
  });
 
  const data = await response.json();
 
  res.status(response.status).json(data);
}

Теперь вы можете отправлять запросы к /api/proxy вместо прямого обращения к внешнему API:

fetch("/api/proxy", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    Authorization: "Bearer your-token",
  },
  body: JSON.stringify({ key: "value" }),
})
  .then((response) => response.json())
  .then((data) => console.log(data))
  .catch((error) => console.error("Error:", error));
  1. Использование библиотеки next-connect для обработки CORS

Вы можете использовать библиотеку next-connect для более удобной обработки CORS в ваших API маршрутах:

Установите библиотеку:

npm install next-connect

Создайте файл pages/api/example.js:

import nextConnect from "next-connect";
import cors from "cors";
 
const handler = nextConnect()
  .use(
    cors({
      origin: "https://your-nextjs-app-domain.com",
      methods: ["GET", "POST", "PUT", "DELETE"],
      allowedHeaders: ["Content-Type", "Authorization"],
    }),
  )
  .get((req, res) => {
    res.json({ message: "GET request successful" });
  })
  .post((req, res) => {
    res.json({ message: "POST request successful" });
  });
 
export default handler;

Теперь вы можете отправлять запросы к /api/example с правильными заголовками CORS.

Эти методы помогут вам эффективно обрабатывать запросы CORS в вашем Next.js приложении.


Назад