处理Gatsby.js中的帖子和第二种降价内容

时间:2018-01-14 03:54:56

标签: gatsby

我正在尝试向我的gatsby项目添加第二种类型的内容,'资源',以及帖子。 获取资源可以,但帖子已经消失。

如何设置第二种内容的步骤,以便从帖子发布到帖子和(在我的情况下)资源?

拥有以下内容:

gatsby-config.js中的

{
  resolve: 'gatsby-source-filesystem',
  options: {
    path: `${__dirname}/src/pages`,
    name: 'pages',
  },
  resolve: 'gatsby-source-filesystem',
  options: {
    path: `${__dirname}/src/resources`,
    name: 'resources',
  }
}

在/ templates中,我添加了resource.js

import React from 'react';
import Helmet from 'react-helmet';

export default function Template({data}) {
  const {markdownRemark: resource} = data;
  return (
    <div>
      <h1>{resource.frontmatter.title}</h1>
      <div dangerouslySetInnerHTML= {{__html:resource.html}} />
    </div>
  )
}

export const resourceQuery = graphql`
  query ResourceByPath($path: String!) {
    markdownRemark(frontmatter: { path: {eq: $path} }) {
      html
      frontmatter {
        path
        title
      }
    }
  }
`

我的index.js(我希望我的资源列出的位置)是列出资源。但是在page-2我有相同的代码,我得到资源,而不是帖子。

这是gatsby-node.js

const path = require('path');

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

  const postTemplate = path.resolve(`src/templates/post.js`);

  return graphql(`{
    allMarkdownRemark {
      edges {
        node {
          html
          id
          frontmatter {
            path
            title
            date
          }
        }
      }
    }
  }`)
  .then(res => {
    if(res.errors) {
      return Promise.reject(res.errors);
    }

    res.data.allMarkdownRemark.edges.forEach(({node}) => {
      createPage({
        path: node.frontmatter.path,
        component: postTemplate
      })
    })
  })
}

1 个答案:

答案 0 :(得分:0)

由于在one of the Gatsby issues中使用解决方案示例讨论了类似的问题,因此我将不做详细介绍。