使用NetLify函数加载本地文件



我已经编写了一个脚本,该脚本使用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请求以获取主脚本中的文件。

相关内容

  • 没有找到相关文章

最新更新