如何在gatsbyjs中修复“未知参数'slug'”?

时间:2019-04-27 05:12:04

标签: javascript node.js reactjs graphql gatsby

我目前正在尝试使用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'”错误。

1 个答案:

答案 0 :(得分:2)

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
     }
    }
   }
 `