Для создания API-роутов внутри /app директории, как правило, создается вложенная директория /api со своими папками, внутри которых создается файл с названием route.ts.
Если файл находит по пути /app/api/posts/, то адрес запроса будет /api/posts.
Сам route.ts должен экспортировать объект с функциями по именам HTTP методов: GET, POST, DELETE и так далее.
Например:
export async function GET(req: Request) {
return NextResponse.json(currentPosts);
}| Page | Route | Result |
|---|---|---|
| app/page.js | app/route.js | 💥 Conflict |
| app/page.js | app/api/route.js | 👌 Valid |
| app/[user]/page.js | app/api/route.js | 👌 Valid |
// получение квери параметров
export async function GET(req: Request) {
const { searchParams } = new URL(req.url);
const query = searchParams.get("q");
// some logic
return NextResponse.json(currentPosts);
}// получение тела запроса
export async function POST(req: Request) {
const body = await req.json();
console.log(body);
return NextResponse.json({ message: "done" });
}// получение параметров URL
export async function DELETE(
req: Request,
{ params }: { params: { id: string } }
) {
const id = params?.id;
// some logic for delete post by id
return NextResponse.json({ id });
}import { headers, cookies } from "next/headers";
export async function GET(req: Request) {
const headersList = headers();
const cookiesList = cookies();
const type = headersList.get("Content-Type");
const Cookie_1 = cookiesList.get("Cookie_1")?.value;
return NextResponse.json({});
}import { redirect } from "next/navigation";
export async function GET(request: Request) {
redirect("https://nextjs.org/");
}