如何使 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}`)
  ))