mirror of
https://github.com/hanzoai/next.js.git
synced 2026-10-30 14:46:38 +00:00
When opting into caching a POST request with the `revalidate` option, or when the Server Components HMR Cache implicitly caches a POST request, the body of the request is now correctly handled if it is a `Uint8Array`. Previously, we logged `Failed to generate cache key for ...` and the cache was bypassed. closes NAR-180
89 lines
2.2 KiB
JavaScript
89 lines
2.2 KiB
JavaScript
import { fetchRetry } from '../../../lib/fetch-retry'
|
|
|
|
export const dynamic = 'force-dynamic'
|
|
|
|
export default async function Page() {
|
|
const data = await fetchRetry(
|
|
'https://next-data-api-endpoint.vercel.app/api/random',
|
|
{
|
|
method: 'POST',
|
|
next: {
|
|
revalidate: 10,
|
|
},
|
|
}
|
|
).then((res) => res.text())
|
|
|
|
const dataWithBody1 = await fetchRetry(
|
|
'https://next-data-api-endpoint.vercel.app/api/random',
|
|
{
|
|
method: 'POST',
|
|
body: JSON.stringify({ hello: 'world' }),
|
|
next: {
|
|
revalidate: 10,
|
|
},
|
|
}
|
|
).then((res) => res.text())
|
|
|
|
const dataWithBody2 = await fetchRetry(
|
|
'https://next-data-api-endpoint.vercel.app/api/random',
|
|
{
|
|
method: 'POST',
|
|
body: new ReadableStream({
|
|
start(controller) {
|
|
controller.enqueue(JSON.stringify({ another: 'one' }))
|
|
controller.close()
|
|
},
|
|
}),
|
|
duplex: 'half',
|
|
next: {
|
|
revalidate: 10,
|
|
},
|
|
}
|
|
).then((res) => res.text())
|
|
|
|
const dataWithBody3 = await fetchRetry(
|
|
'https://next-data-api-endpoint.vercel.app/api/random',
|
|
{
|
|
method: 'POST',
|
|
body: new URLSearchParams('myParam=myValue&myParam=anotherValue'),
|
|
next: {
|
|
revalidate: 30,
|
|
},
|
|
}
|
|
).then((res) => res.text())
|
|
|
|
const dataWithBody4 = await fetchRetry(
|
|
'https://next-data-api-endpoint.vercel.app/api/random',
|
|
{
|
|
method: 'POST',
|
|
body: new URLSearchParams('myParam=myValue&myParam=diffValue'),
|
|
next: {
|
|
revalidate: 30,
|
|
},
|
|
}
|
|
).then((res) => res.text())
|
|
|
|
const dataWithBody5 = await fetchRetry(
|
|
'https://next-data-api-endpoint.vercel.app/api/random',
|
|
{
|
|
method: 'POST',
|
|
body: new TextEncoder().encode(JSON.stringify({ hi: 'there' })),
|
|
next: {
|
|
revalidate: 30,
|
|
},
|
|
}
|
|
).then((res) => res.text())
|
|
|
|
return (
|
|
<>
|
|
<p id="page">/variable-revalidate/post-method-cached</p>
|
|
<p id="page-data">{data}</p>
|
|
<p id="data-body1">{dataWithBody1}</p>
|
|
<p id="data-body2">{dataWithBody2}</p>
|
|
<p id="data-body3">{dataWithBody3}</p>
|
|
<p id="data-body4">{dataWithBody4}</p>
|
|
<p id="data-body5">{dataWithBody5}</p>
|
|
</>
|
|
)
|
|
}
|