【发布时间】:2021-01-16 20:10:37
【问题描述】:
我正在制作电子商务 Next.js 静态应用。
对于我的产品页面,我使用增量静态生成(我将进一步称其为 ISG)和 fallback: true 和简单的 useRouter 来显示加载组件(如微调器或其他东西,没关系)。 ISG对于数据更新频繁的静态站点(如添加cmets、新产品等)非常有用,但是如果我没有产品路径(例如/products/nike-pants-12345)页面会返回“无限加载”并报错.
错误如下。
如果我们在控制台中查看,我们可以看到类似:TypeError: Cannot read property '_id' of null。这意味着应用没有找到具有请求 _id 的产品(可能是名称、slug 等)。
那么,问题是我该如何避免这种情况,是否应该完全避免这种情况?
export async function getStaticPaths() {
await dbConnect()
const products = await ProductModel.find({})
const paths = products.map((doc) => {
const product = doc.toObject()
return {
params: { id: product._id.toString() }
}
})
/* fallback: true means that the missing pages
will not 404, and instead can render a fallback */
return { paths, fallback: true }
}
export async function getStaticProps({ params }) {
await dbConnect()
const product = await ProductModel.findById(params.id).lean()
product._id = product._id.toString()
// revalidate set the time (in sec) of re-generate page (it imitate SSR)
return { props: { product }, revalidate: 30 }
}
【问题讨论】:
-
能否提供代码
-
您能在问题中添加
getStaticProps代码吗?您可能需要在其中明确处理这些情况。 -
感谢您关注我的问题!我在问题的底部添加了请求的代码。
-
@juliomalves 我在问题的底部添加了请求的代码。
-
@Vince 我在我的问题中添加了代码:)