first day of vibe coding
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
import { NextRequest, NextResponse } from 'next/server'
|
||||
|
||||
const API_BASE = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:8000'
|
||||
|
||||
async function handler(request: NextRequest): Promise<NextResponse> {
|
||||
const url = new URL(request.url)
|
||||
const targetPath = url.pathname.replace('/api/proxy', '')
|
||||
const targetUrl = `${API_BASE}${targetPath}${url.search}`
|
||||
|
||||
const headers = new Headers(request.headers)
|
||||
// Remove Next.js internal headers
|
||||
headers.delete('host')
|
||||
headers.delete('x-forwarded-for')
|
||||
headers.delete('x-forwarded-host')
|
||||
headers.delete('x-forwarded-proto')
|
||||
|
||||
const body =
|
||||
request.method !== 'GET' && request.method !== 'HEAD'
|
||||
? await request.arrayBuffer()
|
||||
: undefined
|
||||
|
||||
try {
|
||||
const upstream = await fetch(targetUrl, {
|
||||
method: request.method,
|
||||
headers,
|
||||
body,
|
||||
})
|
||||
|
||||
const responseHeaders = new Headers(upstream.headers)
|
||||
responseHeaders.delete('transfer-encoding')
|
||||
|
||||
const responseBody = await upstream.arrayBuffer()
|
||||
|
||||
return new NextResponse(responseBody, {
|
||||
status: upstream.status,
|
||||
statusText: upstream.statusText,
|
||||
headers: responseHeaders,
|
||||
})
|
||||
} catch (err) {
|
||||
return NextResponse.json(
|
||||
{ error: 'Upstream request failed', detail: String(err) },
|
||||
{ status: 502 },
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
export const GET = handler
|
||||
export const POST = handler
|
||||
export const PUT = handler
|
||||
export const PATCH = handler
|
||||
export const DELETE = handler
|
||||
export const HEAD = handler
|
||||
export const OPTIONS = handler
|
||||
Reference in New Issue
Block a user