如何使 Next.js 中的 slugs 数组无效?
How to invalidate array of sluges in Next.js?
从 12.1.0 开始,可以进行按需重新验证。
https://nextjs.org/docs/basic-features/data-fetching/incremental-static-regeneration
正在发送程序 ID 数组,如何使 slug 数组无效?我试过这个:
export default async function handler(req, res) {
// Check for secret to confirm this is a valid request
if (req.query.secret !== process.env.NEXT_PUBLIC_SECRET_TOKEN) {
return res.status(401).json({ message: 'Invalid token' })
}
try {
const programIds: String[] = req.query.programId
programIds.map((programId) =>
await res.unstable_revalidate(`/hu/buyTicket/${programId}`)
)
return res.json({ revalidated: true })
} catch (err) {
// If there was an error, Next.js will continue
// to show the last successfully generated page
return res.status(500).send('Error revalidating')
}
}
我收到这个错误:
'await' expressions are only allowed within async functions and at the top levels of modules.
.map
即使你用async
也不尊重await
。在您的情况下,您将在重新验证完成之前收到回复,这是 不正确的行为。
正确的方法应该包括Promise.all
的用法,这样res.json
只有在所有的revalidation都完成后才会被调用,try/catch
块才能正确捕获错误。
await Promise.all(programIds.map(async (programId) =>
await res.unstable_revalidate(`/hu/buyTicket/${programId}`)
))
从 12.1.0 开始,可以进行按需重新验证。
https://nextjs.org/docs/basic-features/data-fetching/incremental-static-regeneration
正在发送程序 ID 数组,如何使 slug 数组无效?我试过这个:
export default async function handler(req, res) {
// Check for secret to confirm this is a valid request
if (req.query.secret !== process.env.NEXT_PUBLIC_SECRET_TOKEN) {
return res.status(401).json({ message: 'Invalid token' })
}
try {
const programIds: String[] = req.query.programId
programIds.map((programId) =>
await res.unstable_revalidate(`/hu/buyTicket/${programId}`)
)
return res.json({ revalidated: true })
} catch (err) {
// If there was an error, Next.js will continue
// to show the last successfully generated page
return res.status(500).send('Error revalidating')
}
}
我收到这个错误:
'await' expressions are only allowed within async functions and at the top levels of modules.
.map
即使你用async
也不尊重await
。在您的情况下,您将在重新验证完成之前收到回复,这是 不正确的行为。
正确的方法应该包括Promise.all
的用法,这样res.json
只有在所有的revalidation都完成后才会被调用,try/catch
块才能正确捕获错误。
await Promise.all(programIds.map(async (programId) =>
await res.unstable_revalidate(`/hu/buyTicket/${programId}`)
))