我已经编写了一个脚本,该脚本使用netlify的Functions
功能(https://functions.netlify.com/(,将JSON文件输入API端点。但是,在大多数情况下,这无关紧要,但是,我的端点之一具有很多文本,并且为了易于编辑,我将大型文本块分为Markdown文件,然后将其加载到端点。
在本地,这可以很好地工作,但是当部署时,我会收到一个 Failed to load resource: the server responded with a status of 502 ()
的控制台错误。我认为这是因为我使用了节点fs
方法,而Netlify不允许这样做,但是,我找不到任何信息。
我使用的代码在这里:
const marked = require('marked')
const clone = require('lodash').cloneDeep
const fs = require('fs')
const resolve = require('path').resolve
const data = require('../data/json/segments.json')
// Clone the object
const mutatedData = clone(data)
// Mutate the cloned object
mutatedData.map(item => {
if (item.content) {
const file = fs.readFileSync(resolve(`./src/data/markdown/${item.content}`), 'utf-8')
item.content = marked(file)
}
})
exports.handler = function(event, context, callback) {
callback(null, {
statusCode: 200,
body: JSON.stringify({data: mutatedData})
});
}
我也尝试替换
const file = fs.readFileSync(resolve(`./src/data/markdown/${item.content}`), 'utf-8')
const file = require(`../data/markdown/${item.content}`)
但这会抱怨装载机,我想避免在使用create-react-app
时添加WebPack配置,此外,我怀疑这会有所帮助,因为我在构建时间后仍会访问文件系统。
之前有人遇到过这个问题吗?
在编写此答案时(2019年9月(,Netlify似乎没有将辅助文件上传到AWS lambda,看来只有导出handler
的脚本才能上传。即使您有多个导出多个处理程序的脚本,Netlify似乎也将它们上传到孤立的"容器"(不同的AWS实例(中,这意味着脚本将无法在相对路径中互相见面。免责声明:我只用一个免费帐户进行测试,可能有一些我不知道的设置。
解决方法:
对于辅助脚本,将它们制作到NPM
软件包中,将其添加到package.json
中,并将它们在主脚本中添加到require
中。它们将安装并可以使用。
对于静态文件,您可以像拥有AWS lambda之前的NetLify托管它们,并提出http
请求以获取主脚本中的文件。