以编程方式从 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项目中以编程方式生成的路由

使用 gatsby 以编程方式导航到动态 url

在 C# 中以编程方式从 Excel 文件中大量导入数据到 Access

以编程方式从 Excel 电子表格中提取数据