如何将 Directus 与 gatsby 一起使用
how to use Directus with gatsby
如何在 getsby.js
中使用 Directus 数据
我已经设置了一个 Directus 应用程序,并添加了表格和 data/columns 但我不知道如何在 gatsby.js 中使用它,我在 jsx 中构建了一个这样的模板:
const path = require('path')
exports.createPages = ({ boundActionCreators, graphql }, { urlPrefix }) => {
const { createPage } = boundActionCreators
return new Promise((resolve, reject) => {
resolve(
graphql(
`
{
allDirectusPost {
edges {
node {
id
title
author
content
}
}
}
}
`
).then(result => {
if (result.errors) {
console.error('GraphQL query returned errors')
reject(result.errors)
}
result.data.allDirectusPost.edges.forEach(edge => {
try {
let node = edge.node
let path = `posts/${node.id}`
createPage({
path,
layout: 'index',
component: path.resolve('src/templates/post.jsx'),
context: {
post: node,
},
})
console.log(`Generated page '${path}'`)
}
catch (error) {
console.error(`Failed to generate page posts/'${path}': ${error}`)
}
})
})
)
})
}
我在 gatsby.js 中有一个主页静态站点,就像这样
import React from 'react'
import Link from 'gatsby-link'
// import postsTemplate from '../templates/post.jsx'
const IndexPage = () => (
<div>
<h1>Hi people</h1>
<p>Welcome to your new Gatsby site.000</p>
<p>Now go build something great.</p>
<post />
<Link to="/page-2/">Go to page 2</Link>
</div>
)
export default IndexPage
如何调用该 gatsby 文件中的 directus 数据?
对于您的 Directus table 中的每个项目,将基于 src/templates/post.jsx
组件创建一个新页面。这将是 IndexPage
.
的一组完全独立的页面
从 Directus 获取页面源代码的步骤与从 Markdown 获取页面源代码的步骤非常相似。我建议您再读一遍 https://www.gatsbyjs.org/docs/adding-markdown-pages/(虽然看起来您确实读过,因为您的 gatsby-node.js
代码看起来像是从那里借来的)。在 posts.jsx
中,您想查询 allDirectusPost(edges: { node: {id: {eq: $path } } })
.
而不是查询 markdownRemark(frontmatter: { path: { eq: $path } })
如何在 getsby.js
中使用 Directus 数据我已经设置了一个 Directus 应用程序,并添加了表格和 data/columns 但我不知道如何在 gatsby.js 中使用它,我在 jsx 中构建了一个这样的模板:
const path = require('path')
exports.createPages = ({ boundActionCreators, graphql }, { urlPrefix }) => {
const { createPage } = boundActionCreators
return new Promise((resolve, reject) => {
resolve(
graphql(
`
{
allDirectusPost {
edges {
node {
id
title
author
content
}
}
}
}
`
).then(result => {
if (result.errors) {
console.error('GraphQL query returned errors')
reject(result.errors)
}
result.data.allDirectusPost.edges.forEach(edge => {
try {
let node = edge.node
let path = `posts/${node.id}`
createPage({
path,
layout: 'index',
component: path.resolve('src/templates/post.jsx'),
context: {
post: node,
},
})
console.log(`Generated page '${path}'`)
}
catch (error) {
console.error(`Failed to generate page posts/'${path}': ${error}`)
}
})
})
)
})
}
我在 gatsby.js 中有一个主页静态站点,就像这样
import React from 'react'
import Link from 'gatsby-link'
// import postsTemplate from '../templates/post.jsx'
const IndexPage = () => (
<div>
<h1>Hi people</h1>
<p>Welcome to your new Gatsby site.000</p>
<p>Now go build something great.</p>
<post />
<Link to="/page-2/">Go to page 2</Link>
</div>
)
export default IndexPage
如何调用该 gatsby 文件中的 directus 数据?
对于您的 Directus table 中的每个项目,将基于 src/templates/post.jsx
组件创建一个新页面。这将是 IndexPage
.
从 Directus 获取页面源代码的步骤与从 Markdown 获取页面源代码的步骤非常相似。我建议您再读一遍 https://www.gatsbyjs.org/docs/adding-markdown-pages/(虽然看起来您确实读过,因为您的 gatsby-node.js
代码看起来像是从那里借来的)。在 posts.jsx
中,您想查询 allDirectusPost(edges: { node: {id: {eq: $path } } })
.
markdownRemark(frontmatter: { path: { eq: $path } })