برای دریافت اعلان از سرویسهای خارجی مانند CMS، میتوانید از Route Handler استفاده کنید. مثال زیر مسیر /app/webhook/route.ts را بررسی میکند:
export async function GET(request: NextRequest) {
const token = request.nextUrl.searchParams.get('token')
if (token !== process.env.REVALIDATE_SECRET_TOKEN) {
return NextResponse.json({ success: false }, { status: 401 })
}
const tag = request.nextUrl.searchParams.get('tag')
if (!tag) {
return NextResponse.json({ success: false }, { status: 400 })
}
revalidateTag(tag)
return NextResponse.json({ success: true })
}پس از تکمیل یک فرآیند در سرویس ثالث، کاربر به آدرس بازگشتی هدایت میشود. در این مسیر میتوان نشست را تنظیم کرد و کاربر را ریدایرکت نمود:
export async function GET(request: NextRequest) {
const token = request.nextUrl.searchParams.get('session_token')
const redirectUrl = request.nextUrl.searchParams.get('redirect_url')
const response = NextResponse.redirect(new URL(redirectUrl, request.url))
response.cookies.set({
value: token,
name: '_token',
path: '/',
secure: true,
httpOnly: true,
})
return response
}فایل proxy.ts میتواند قبل از رسیدن درخواست به مسیر اصلی، پاسخ تولید کند. فقط یک فایل پراکسی در هر پروژه مجاز است.
export const config = {
matcher: '/api/:function*',
}
export function proxy(request: Request) {
if (!isAuthenticated(request)) {
return Response.json({ success: false, message: 'authentication failed' }, { status: 401 })
}
}مثالهای دیگر:
NextResponse.rewrite()NextResponse.redirect()هدرهای ورودی را مستقیماً به پاسخ خروجی منتقل نکنید. هدرهای پاسخ قابل مشاهده برای کلاینت هستند.
export async function POST(request: Request) {
const { rateLimited } = await checkRateLimit(request)
if (rateLimited) {
return NextResponse.json({ error: 'Rate limit exceeded' }, { status: 429 })
}
return new Response(null, { status: 204 })
}درخواستهای OPTIONS به سرور اعلام میکنند که آیا درخواست اصلی مجاز است. اگر تعریف نشده باشد، Next.js بهصورت خودکار آن را اضافه میکند.
برخی کتابخانهها از الگوی factory برای ساخت هندلر استفاده میکنند:
import { createHandler } from 'third-party-library'
const handler = createHandler({ /* options */ })
export const GET = handler
export { handler as POST }dynamic = 'force-static' پشتیبانی میشوندNext.js ابزارهای قدرتمندی برای دریافت رویدادها، مدیریت نشست، پراکسیسازی، و کنترل امنیت در بکاند فراهم میکند. با استفاده از Route Handler، پراکسی، و بررسی دقیق درخواستها، میتوان لایهای امن و منعطف برای تعامل با سرویسهای خارجی ساخت.