Проблемы с доступом к файлам cookie только для HTTP в обработчике маршрута Next.js 14, вызываемом из страницы SSR

Я работаю над проектом 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)
}
Вера
Вопрос задан10 июля 2024 г.

1 Ответ

2
Любовь
Ответ получен15 сентября 2024 г.

Ваш ответ

Загрузить файл.