【发布时间】:2021-02-26 06:49:13
【问题描述】:
我正在学习 Gatsby,我想将 MDX 用于博客页面。我按照教程here 以编程方式创建页面。
我可以在我的 GraphQL 中看到它们,并且显示所有文章的列表正在使用它们的标题和 slug,但是当我单击链接打开它们或输入它们的地址时,我有一个 404 页面。你知道它的来源吗?
这是我的代码:
gatsby-node.js:
exports.onCreateNode = ({ node, actions, getNode }) => {
const { createNodeField } = actions
if (node.internal.type === "Mdx") {
const value = createFilePath({ node, getNode })
createNodeField({
name: "slug",
node,
value: `/blog${value}`,
})
}
}
gatsby-config.js:
plugins: [
{
resolve: `gatsby-plugin-mdx`,
options: {
defaultLayouts: { default: path.resolve('./src/layouts/post.js') },
extensions: [`.mdx`, `.md`],
},
},
{
resolve: `gatsby-source-filesystem`,
options: {
name: `posts`,
path: `${__dirname}/src/posts`
}
},
],
index.js(带有列表):
<ul>
{posts.map(({ node: post }) => (
<li key={post.id}>
<Link to={post.fields.slug}>
<h2>{post.frontmatter.title}</h2>
</Link>
<p>{post.excerpt}</p>
</li>
))}
</ul>
index.js 中的查询
export const pageQuery = graphql`
query blogIndex {
allMdx {
edges {
node {
id
excerpt
frontmatter {
title
}
fields {
slug
}
}
}
}
}
`
模板:
<div>
<div className="content" dangerouslySetInnerHTML={{ __html: post.html }}></div>
</div>
以及模板的查询:
export const pageQuery = graphql`
query BlogPostQuery($id: String) {
mdx(id: { eq: $id }) {
id
body
frontmatter {
title
}
}
}
`
如果你想测试它,我做了一个 repo:https://github.com/JulSeb42/gatsby-mdx
感谢您的回答!
【问题讨论】:
标签: javascript reactjs graphql gatsby