Route Handlers
Route Handlers in JetShip provide a way to create custom API endpoints using Next.js App Router. This guide explains how to effectively implement and use route handlers in your JetShip application.
Overview
Route Handlers allow you to:
- Create custom API endpoints
- Handle webhooks
- Process form submissions
- Manage authentication flows
- Serve dynamic data
Basic Implementation
Create a route handler by adding a route.ts
file in your app directory:
// app/api/hello/route.ts
import { NextResponse } from 'next/server'
export async function GET(request: Request) {
return NextResponse.json({ message: 'Hello from JetShip!' })
}
HTTP Methods
JetShip route handlers support all standard HTTP methods:
import { NextResponse } from 'next/server'
export async function GET(request: Request) {
// Handle GET requests
}
export async function POST(request: Request) {
// Handle POST requests
}
export async function PUT(request: Request) {
// Handle PUT requests
}
export async function DELETE(request: Request) {
// Handle DELETE requests
}
export async function PATCH(request: Request) {
// Handle PATCH requests
}
Request Handling
URL Parameters
Access URL parameters and search params:
export async function GET(request: Request, { params }: { params: { id: string } }) {
const { searchParams } = new URL(request.url)
const query = searchParams.get('query')
return NextResponse.json({ id: params.id, query })
}
Webhook Handlers
Example of a webhook handler for payment providers:
// app/api/webhook/route.ts
import { headers } from 'next/headers'
import { NextResponse } from 'next/server'
import { createServiceRoleClient } from '@repo/supabase/server'
export async function POST(request: Request) {
try {
const body = await request.json()
const headersList = headers()
const signature = headersList.get('stripe-signature')
// Verify webhook signature
if (!signature) {
return NextResponse.json({ error: 'No signature provided' }, { status: 401 })
}
// Process webhook event
const supabase = createServiceRoleClient()
await processWebhookEvent(body, supabase)
return NextResponse.json({ received: true })
} catch (error) {
console.error('Webhook error:', error)
return NextResponse.json({ error: 'Webhook handler failed' }, { status: 400 })
}
}
Response Handling
JSON Responses
export async function GET() {
return NextResponse.json({
data: {
/* your data */
},
message: 'Success'
})
}
Redirects
export async function POST() {
return NextResponse.redirect(new URL('/success', request.url))
}
Custom Headers
export async function GET() {
return new NextResponse('Hello', {
status: 200,
headers: {
'Content-Type': 'text/plain',
'Cache-Control': 'no-cache, no-store'
}
})
}