【问题标题】:How to fix "Unknown argument 'slug' " in gatsbyjs?如何修复 gatsbyjs 中的“未知参数'slug'”?
【发布时间】:2019-09-16 13:11:19
【问题描述】:

我目前正在尝试使用 gatsbyjs 创建一个博客站点,并希望我的博客帖子以编程方式为其创建页面。

我按照官方文档教程部分中的步骤进行操作,但不是从 Markdown 文件创建页面,而是从内容丰富的 CMS 中提取数据。每当我运行我的代码时,我都会不断地点击这个块。

gatsby-node.js

const path= require('path')

exports.createPages=({graphql,actions})=>{
const {createPage}=actions

const blogPost= path.resolve('./src/components/blogComponents/blog-post.js')
return new Promise((resolve,reject)=>{
    graphql(`
    {
        allContentfulBlog{
            edges{
              node{
                slug
              }
            }
          }
    }
`).then(results=>{
    // console.log(results)
    if(results.error){
        reject(results.error)
    }
      // create blog post pages
const posts=results.data.allContentfulBlog.edges

posts.forEach((post,index)=>{
    console.log(`showing slugs: ${post.node.slug}`)

   createPage({
        path:post.node.slug,
        component:blogPost ,
        context:{

            slug:post.node.slug,

        } 
    })

    })
}).then(resolve)
}) 
}

blog-post.js

   import React from 'react'
   import { graphql} from 'gatsby'


  const blogPost=({data})=>{
return (
    <div>
        new page created
    </div>
)
 }

 export default blogPost
 export const pageQuery= graphql`
  query ($slug: String!){
     allContentfulBlog (slug:{eq: $slug }) {
      edges{
      node{
       content{
           content
       }
      }
    }
  }
 }
 `

我希望 blog-post.js 文件能够接收所有适当的变量,但它在引用 blog-post.js 文件时不断抛出“未知参数 'slug'”错误。

【问题讨论】:

    标签: javascript node.js reactjs graphql gatsby


    【解决方案1】:

    blog-post.js 中,您似乎过滤帖子不正确;要么这样做:

     export const pageQuery= graphql`
      query ($slug: String!){
    
    -    allContentfulBlog (slug:{eq: $slug }) {
    
    +    allContentfulBlog (filter: { slug: { eq: $slug } })
    
          edges {
            node {
             content {
               content
             }
            }
          }
        }
       }
     `
    

    或者这个:

     export const pageQuery= graphql`
      query ($slug: String!){
    
    -    allContentfulBlog (slug:{eq: $slug }) {
    
    +    ContentfulBlog (slug:{eq: $slug }) {
    
         content {
           content
         }
        }
       }
     `
    

    【讨论】:

    • 非常感谢 derek,我刚试了一下,效果很好。我在某处读到,最好使用不带前缀 *all 的“contenfulBlog”,因为它更容易解构。
    • @mujeexminiminer 很高兴它有帮助!我在 Contentful 示例中犯了一些错误,将编辑...我也更喜欢仅使用 ContentfulBlog,原因与您提到的相同。
    • 太棒了!现在我引起了你的注意,Derek,请你指导或指出任何关于如何呈现富文本的文章?富文本转换器插件似乎已被弃用。从那以后我一直在寻找出路。
    • @mujeexminiminer 是富文本内容吗?你读过这个吗? contentful.com/developers/docs/tutorials/general/…
    • 是的,它适用于 Contentful。不,我想我没有!?我会通读一遍,看看我能得到什么。非常感谢!
    猜你喜欢
    • 2019-09-16
    • 2019-10-12
    • 1970-01-01
    • 2020-01-02
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 2022-01-21
    • 2021-09-20
    相关资源
    最近更新 更多