Next.js中的动态路由会收到TypeError:“ id”参数必须为“ string”类型收到空值

问题描述

在Next.js中生成动态页面时遇到了问题。我正在从Sanity中提取数据,我想我的代码正确,但是每次尝试加载页面时,我都会遇到类型错误-“'id'参数必须为字符串类型。收到空值”。文件路径为‘/post/[slug].js’,所以这是我在整个过程中使用的变量名-我不确定id的来源,或者我是否需要传递ID,或者我没有传递ID没事吧!

我已经在Sanity论坛上问过了,这似乎不是API问题-我可以毫无问题地提取应用程序其他部分的数据。在控制台中,页面似乎编译成功,但是在尝试加载页面时出现此错误。我在页面组件中使用了一个空的div进行了尝试,以确保在演示逻辑中没有任何问题,并且没有运气。

我已将完整的错误消息放在gist中,它看起来像是带有开玩笑的服务器或下一台服务器。对于我的一生,我无法弄清楚!

import client from '../../client’

const Post = ({ post }) => {
  ...
}

export default Post

export const getStaticPaths = async () => {
  const posts = await client.fetch(`*[_type == "blog"]{ slug }`)
  const paths = posts.map(post => ({
    params: {
      slug: post.slug.current
    }
  }))
  
  return { 
    paths,fallback: false }
}

export const getStaticProps = async ({ params }) => {
  const post = await client.fetch(`*[_type == "blog" && slug.current == $slug]{ title,date,link,excerpt,body,slug }[0]`,{slug: params.slug})
  
  return {
    props: { post }
  }
} 

更新:play.js或它使用的配置似乎都存在问题-在台式机环境中尝试不会导致相同的错误

解决方法

我认为问题在于您的文件名。名称仅应为[slug].js,应位于pages/post中。当您通过URL http://localhost:xxx/post/pulled-sanity-slug

访问页面时,它应该可以正常工作

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...