我编写了一个脚本,该脚本使用JSON文件,并使用Netlify的Functions
功能(https://functions.netlify.com/)将其输出到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}`)
但是这抱怨加载程序,我想尽可能避免添加Webpack配置,因为我正在使用create-react-app
,此外,我怀疑它会有所帮助,因为我仍然可以访问文件系统在构建时间之后。
以前有没有其他人遇到过这个问题?
答案 0 :(得分:0)
在撰写此答案时(2019年9月),Netlify似乎没有将辅助文件上传到AWS Lambda,看来只有handler
导出的脚本将被上传。即使您有多个脚本导出多个处理程序,Netlify似乎也将它们上载到隔离的“容器”(不同的AWS实例)中,这意味着这些脚本将无法在相对路径中看到彼此。免责声明:我仅使用免费帐户进行了测试,可能有一些我不知道的设置。
解决方法:
对于辅助脚本,将它们放入NPM
包中,并在主脚本中分别添加到package.json
和require
中。它们将被安装并可供使用。
对于静态文件,您可以像拥有AWS Lambda之前一样将它们托管在Netlify上,并发出http
请求以获取主脚本中的文件。