Я работаю над проектом Next.js 14, использующим маршрутизатор приложений, и сталкиваюсь с проблемами доступа к HTTP-куки из обработчика маршрута, который извлекает данные из внешнего API. Этот обработчик маршрута вызывается страницей SSR, и я хочу создать модульный подход для обработки этих вызовов API, особенно для определенной конечной точки, с дополнительным требованием кэширования обработчика маршрута. Однако я не могу извлечь куки auth_token
в обработчике маршрута, когда он вызывается со страницы SSR, несмотря на то, что куки правильно установлены и доступны в других сценариях.
Извлечение куки работает отлично, когда я вызываю веб-службу напрямую со страницы SSR. Однако я хочу использовать более модульный подход, поскольку я буду вызывать эту конечную точку на последующих страницах и хотел бы кэшировать обработчик маршрута для оптимизации производительности.
Страница SSR:
Обработчик маршрута (api/events
):
import { cookies } from 'next/headers'
import React from 'react'
export default async function Page() {
const token = cookies().get('auth_token')
const response = await fetch(`/api/events`)
const data = await response.json()
return <div>{data.map(event => <div key={event.id}>{event.name}</div>)}</div>
}
import { NextResponse } from 'next/server'
import { cookies } from 'next/headers'
export async function GET(request) {
const cookieStore = cookies()
const authToken = cookieStore.get('auth_token')?.value
if (!authToken) {
return NextResponse.json({ status: 401, error: 'Unauthorized' })
}
// Make API call with the auth token and return the response
const apiUrl = `${process.env.MY_API_URL}/api/Events`
const apiResponse = await fetch(apiUrl, {
headers: {
'Authorization': `Bearer ${authToken}`
}
})
const data = await apiResponse.json()
return NextResponse.json(data)
}