next.js App-Router:如何为下一个请求持久化API头

ejk8hzay  于 2023-06-29  发布在  其他
关注(0)|答案(1)|浏览(121)

我目前正在努力解决以下问题:
从一个API-GET-Request中,我得到了一个etag-Header,我需要该高速缓存中持久化以进行可能的UPDATE?DELETE请求作为If-Match-报头发送。
我尝试将其保存在服务器端Cookie中,如下所示:

// app/api/cart/[cartId]/route.ts
import { withApiAuthRequired } from '@auth0/nextjs-auth0';
import { NextResponse } from 'next/server';
import { createGlueServerClient } from '@/src/lib/http/client/client.glue.server';
import { cookies } from 'next/headers';

function setEtagFromResponse(response: Response) {
  const etag = response.headers.get('etag');
  if (etag) {
    cookies().set('etag', etag);
  }
}

const GET = withApiAuthRequired(async (request: Request, { params }: { params: { cartId: string } }) => {
  const client = createGlueServerClient();
  const response = await client.get(`carts/${params.cartId}`, {
    withAuth: true,
  });

  setEtagFromResponse(response);

  return NextResponse.json(await response.json());
});

export { GET };

但是当我尝试在PATCH-Request中使用cookies().get('etag').value获取它时,它不在那里...

bjg7j2ky

bjg7j2ky1#

更好的方法是在GET响应头中返回etag值。这样,客户端就可以从响应中读取它,然后在后续的PATCH / DELETE请求中使用它。cookie方法将容易出现竞争条件。

相关问题