You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js动态路由静态生成报错:paths需为字符串数组或指定格式对象

问题分析与解决方案

你的问题核心在于**getAllPostIds是异步函数,但你在getStaticPaths中调用它时没有使用await关键字**,导致paths变量实际拿到的是一个Promise对象,而不是Next.js期望的路径数组,这才触发了格式错误。

具体问题点

看你的getStaticPaths代码:

export async function getStaticPaths() {
  const paths = getAllPostIds() // 这里没有await,paths是Promise,不是数组
  return { paths, fallback: false }
}

虽然getAllPostIds内部返回的是正确格式的数组,但因为它是async函数,调用后会返回一个Promise,而不是直接返回数组。Next.js无法识别Promise作为paths的值,所以抛出了路径格式无效的错误。

修改后的代码

你只需要在调用getAllPostIds时加上await即可:

[id].js 修改后的getStaticPaths

export async function getStaticPaths() {
  // 加上await,等待异步函数返回实际数组
  const paths = await getAllPostIds()
  return { paths, fallback: false }
}

补充验证

你的getAllPostIds函数本身逻辑是对的,返回的[{ params: { id: '1' } }]完全符合Next.js要求的格式。加上await获取到实际数组后,你可以在函数里打印确认:

export async function getStaticPaths() {
  const paths = await getAllPostIds()
  console.log(paths) // 现在应该输出 [{ params: { id: '1' } }]
  return { paths, fallback: false }
}

这样修改后,你的动态路由静态生成应该就能正常工作了。

内容的提问来源于stack exchange,提问作者stackyname

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 16:28:02