XMLHttprequest 未在 Gatsby-node + react-papaparse 中定义
XMLHttprequest is not defined in Gatsby-node + react-papaparse
我是react和gatsby的新手,不过看起来学起来有点意思。所以我的想法是建立一个网站,每行 Google 表格都有一个页面。所以你可以说我想制作 google sheets CMS。还有其他更容易使用的工具,但有些只是停止开发,有些使用起来非常昂贵。所以我想用papaparse插件手动制作。
我的 google sheet 以 CSV 格式“发布到网络”。我想使用 react-papaparse 进行浏览器内 CSVtoJSON 解析。我的 gatsby-node.js 是从 gatsby 文档复制的,所以它有点准系统。
在我的盖茨比-node.js
const papaparse = require("react-papaparse")
exports.sourceNodes = ({ actions, createNodeId, createContentDigest }) => {
const { createNode } = actions
const myData = papaparse.readRemoteFile("published sheet links",{
download: true,
header: true,
delimiter: ',',
dynamicTyping: true,
})
const nodeContent = JSON.stringify(myData)
const nodeMeta = {
id: createNodeId(`my-data-${myData.key}`),
parent: null,
children: [],
internal: {
type: `MyNodeType`,
mediaType: `text/html`,
content: nodeContent,
contentDigest: createContentDigest(myData)
}
}
const node = Object.assign({}, myData, nodeMeta)
createNode(node)
}
当我 运行 时,它会在我的 google sheet 链接中抛出 XMLHttpRequest is not defined 错误。所以这似乎是关于 CORS 问题?
解决方法是什么?
谢谢
恐怕您将无法使用 XMLHttpRequest
因为它在 Node 服务器中永远不可用(出于显而易见的原因),它将在您的浏览器端可用,但在您的用例,您需要它在构建时在节点服务器中可用,以创建您的模式。
您可以尝试使用其他一些抓取方法(fetch
、axios 等)或使用一些插件,例如gatsby-source-google-sheets
。您只需要安装插件并:
{
resolve: 'gatsby-source-google-sheets',
options: {
spreadsheetId: 'get this from the sheet url',
worksheetTitle: 'ie the name in the worksheet tab',
credentials: require('./path-to-credentials-file.json')
}
},
这将在构建时获取您的工作表,创建推断的 GraphQL 节点架构
资源:
我是react和gatsby的新手,不过看起来学起来有点意思。所以我的想法是建立一个网站,每行 Google 表格都有一个页面。所以你可以说我想制作 google sheets CMS。还有其他更容易使用的工具,但有些只是停止开发,有些使用起来非常昂贵。所以我想用papaparse插件手动制作。
我的 google sheet 以 CSV 格式“发布到网络”。我想使用 react-papaparse 进行浏览器内 CSVtoJSON 解析。我的 gatsby-node.js 是从 gatsby 文档复制的,所以它有点准系统。
在我的盖茨比-node.js
const papaparse = require("react-papaparse")
exports.sourceNodes = ({ actions, createNodeId, createContentDigest }) => {
const { createNode } = actions
const myData = papaparse.readRemoteFile("published sheet links",{
download: true,
header: true,
delimiter: ',',
dynamicTyping: true,
})
const nodeContent = JSON.stringify(myData)
const nodeMeta = {
id: createNodeId(`my-data-${myData.key}`),
parent: null,
children: [],
internal: {
type: `MyNodeType`,
mediaType: `text/html`,
content: nodeContent,
contentDigest: createContentDigest(myData)
}
}
const node = Object.assign({}, myData, nodeMeta)
createNode(node)
}
当我 运行 时,它会在我的 google sheet 链接中抛出 XMLHttpRequest is not defined 错误。所以这似乎是关于 CORS 问题? 解决方法是什么?
谢谢
恐怕您将无法使用 XMLHttpRequest
因为它在 Node 服务器中永远不可用(出于显而易见的原因),它将在您的浏览器端可用,但在您的用例,您需要它在构建时在节点服务器中可用,以创建您的模式。
您可以尝试使用其他一些抓取方法(fetch
、axios 等)或使用一些插件,例如gatsby-source-google-sheets
。您只需要安装插件并:
{
resolve: 'gatsby-source-google-sheets',
options: {
spreadsheetId: 'get this from the sheet url',
worksheetTitle: 'ie the name in the worksheet tab',
credentials: require('./path-to-credentials-file.json')
}
},
这将在构建时获取您的工作表,创建推断的 GraphQL 节点架构
资源: