首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在/second%20post还没有一页

在/second%20post还没有一页
EN

Stack Overflow用户
提问于 2021-01-08 21:15:26
回答 1查看 1.6K关注 0票数 2

我对我的盖茨比网站有个问题。我从内容中获取内容,根据gatsby-node.js中的代码,它必须生成两个页面,但当我单击其中的第二个页面时,只有其中一个在工作。

在/second%20post还没有一页

我很困惑,因为这里询问的大多数问题都告诉我们,它们无法生成页面,我不知道是否创建了页面,如果创建了页面,那么为什么它会显示错误消息,以及当到达错误页时,

第二员额

链接是给定的,但它是不可点击的。所有其他代码都在Github码的git存储库中。

请愿书指的是图像,以便在像在这里中理解清楚。

这是我的gatsby-node.js代码文件。

代码语言:javascript
复制
const path = require(`path`)


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

// Define a template for blog post
 const blogPost = path.resolve(`./src/templates/blog-post-contentful.js`)

// Get all markdown blog posts sorted by date
const result = await graphql(
`
 {
  allContentfulBlockchainlearning{
    edges{
      node{
        slug
        title
        subtitle
        
       
      }
    }
  }
}
`
)

if (result.errors) {
 reporter.panicOnBuild(
  `There was an error loading your blog posts`,
  result.errors
  )
  return
}

 const posts = result.data.allContentfulBlockchainlearning.edges

  // Create blog posts pages
  // But only if there's at least one markdown file found at "content/blog" (defined in gatsby- 
config.js)
  // `context` is available in the template as a prop and as a variable in GraphQL

 if (posts.length > 0) {
  posts.forEach((post, index) => {
  const previousPostSlug = index === 0 ? null : posts[index - 1].id
  const $nextPostSlug = index === posts.length - 1 ? null : posts[index + 1].id

  createPage({
    path: post.node.slug,
    component: blogPost,
    context: {
      slug: post.node.slug,
      previousPostSlug,
      $nextPostSlug,
    },
  })
})
}
}

这是我想要创建的博客帖子模板

代码语言:javascript
复制
import React from "react"
import { Link, graphql } from "gatsby"

import Bio from "../components/bio"
import Layout from "../components/layout"
import SEO from "../components/seo"

const BlogPostTemplate = ({ data, location }) => {
const post = data.contentfulBlockchainlearning
const siteTitle = data.site.siteMetadata?.title || `Title`
const { previous, next } = data

return (
<Layout location={location} title={siteTitle}>
  <SEO
    title={post.title}
    description={post.subtitle}
  />
  <article
    className="blog-post"
    itemScope
    itemType="http://schema.org/Article"
  >
    <header>
      <h1 itemProp="headline">{post.title}</h1>
      <p>{post.date}</p>
    </header>
    <section
      dangerouslySetInnerHTML={{ __html: post.content.raw }}
      itemProp="articleBody"
    />
    <hr />
    <footer>
      <Bio />
    </footer>
  </article>
  <nav className="blog-post-nav">
    <ul
      style={{
        display: `flex`,
        flexWrap: `wrap`,
        justifyContent: `space-between`,
        listStyle: `none`,
        padding: 0,
      }}
    >
      <li>
        {previous && (
          <Link to={previous.slug} rel="prev">Hey There
            ← {previous.title}
          </Link>
        )}
      </li>
      <li>
        {next && (
          <Link to={next.slug} rel="next">
            {next.title} →
          </Link>
        )}
      </li>
    </ul>
    </nav>
  </Layout>
 )
 }

  export default BlogPostTemplate

export const pageQuery = graphql`
query BlogPostBySlug(
$slug: String!
$previousPostSlug: String
$nextPostSlug: String

) {
site {
  siteMetadata {
    title
    
    
  }
}
contentfulBlockchainlearning(slug: {eq: $slug}){
  title
  subtitle
  content{
    raw
  }

}
previous: contentfulBlockchainlearning(slug: { eq: $previousPostSlug}) {
  title 
}

    


next:  contentfulBlockchainlearning(slug: { eq: $nextPostSlug }) {
     title     
    
 
      
  
 }
 }
 `
EN

回答 1

Stack Overflow用户

发布于 2021-01-09 11:21:35

问题很简单,您不能像您试图创建的那样创建一个带有空格的URL。second page应该被解析为second-page,因为secondpage之间的空格可能会导致很多问题。

盖茨比正在正确地创建这些页面,因为它们出现在404页上(在gatsby develop下,404页列出了您创建的所有页面)。然而,它没有一个有效的路线,因为你的鼻涕虫必须被毁损。理想情况下,应该从CMS获取正确的格式,但是,您可以添加一些控件以避免这种行为:

代码语言:javascript
复制
 if (posts) {
  posts.forEach((post, index) => {
  let slugifiedPath= post.node.slug.toLowerCase().replace(/\s/g, '-');
  
  const previousPostSlug = index === 0 ? null : posts[index - 1].id
  const $nextPostSlug = index === posts.length - 1 ? null : posts[index + 1].id

  createPage({
    path: slugifiedPath,
    component: blogPost,
    context: {
      slug: post.node.slug,
      previousPostSlug,
      $nextPostSlug,
    },
  })
})
}

这是非常不言自明的,但是,由于您的路径是用错误的格式获取的,所以您需要通过以下方法重构它们:

代码语言:javascript
复制
  let slugifiedPath= post.node.slug.toLowerCase().replace(/\s/g, '-');

它将其转换为小写,并使用连字符(-)的正则表达式替换全局所有空白(-),从而创建一个有效的段塞。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65636521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档