Для обработки запросов 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 приложении.


Назад