Для обработки запросов CORS (Cross-Origin Resource Sharing) в Next.js при отправке запросов API на другой домен, можно использовать несколько подходов:
- Настройка сервера или 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");
});- Использование 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));- Использование библиотеки
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 приложении.