以编程方式从 Excel 数据创建 Gatsby slug。想要更改 getNode(node.parent) 行,但这不起作用
Posted
技术标签:
【中文标题】以编程方式从 Excel 数据创建 Gatsby slug。想要更改 getNode(node.parent) 行,但这不起作用【英文标题】:Programmatically create Gatsby slug from Excel data. Want to change getNode(node.parent) line, but this does not work 【发布时间】:2021-09-19 21:10:00 【问题描述】:我使用 Excel 数据作为数据源。我想动态创建 slug 并以 Gatsby 文档为例。 https://www.gatsbyjs.com/docs/tutorial/part-seven/ 但这不起作用,因为我不使用 Markdown 文件。我将“MarkdownRemark”更改为“ExcelData”。
exports.onCreateNode = ( node, getNode ) =>
if (node.internal.type === `ExcelData`)
const fileNode = getNode(node.parent)
console.log(`\n`, fileNode.relativePath)
当你查看 Gatsby 文档时,代码打印到终端两个 markdown 文件的相对路径:
pages/sweet-pandas-eating-sweets.md pages/pandas-and-bananas.md.我的代码多次打印出相同的路径,因为只有一个 Excel 文件。
我尝试更改代码并使用 Excel 文件中的数据。
const fileNode = getNode(_9)
但这不起作用,我收到如下错误:
"gatsby-node.js" 在运行 onCreateNode 生命周期时抛出错误: _9 未定义
const fileNode = getNode(node._9)
无法读取未定义的属性“relativePath”
是否可以更改(node.parent)?
【问题讨论】:
【参考方案1】:我假设您已经在使用https://www.gatsbyjs.com/plugins/gatsby-transformer-excel/?
Gatsby 有一个新的文件系统路由 API,这意味着创建这样的路由要容易得多,称为 File System Routing API — 它链接到 Collection Routes 部分,该部分会自动从集合中的每个节点创建页面,而无需手动创建 slugs gatsby-node.js
.
例如你的类型是ExcelData
,所以你只需要在src/pages/ExcelData.title.js
创建一个收集路由组件(假设你的电子表格有一个名为title
的字段)来为你的所有电子表格行创建页面。
这适用于任何类型和任何字段。
【讨论】:
以上是关于以编程方式从 Excel 数据创建 Gatsby slug。想要更改 getNode(node.parent) 行,但这不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Gatsby-plugin-image 与以编程方式创建的页面问题
如何从 android 设备上传以编程方式创建的 excel 文件到 PHP 服务器或 MYSQL 数据库
如何从索引页重定向到Gatsby.JS项目中以编程方式生成的路由