Для создания 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/");
}