使用Netlify功能加载本地文件

时间:2019-06-24 16:42:28

标签: javascript node.js netlify

我编写了一个脚本,该脚本使用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,此外,我怀疑它会有所帮助,因为我仍然可以访问文件系统在构建时间之后。

以前有没有其他人遇到过这个问题?

1 个答案:

答案 0 :(得分:0)

在撰写此答案时(2019年9月),Netlify似乎没有将辅助文件上传到AWS Lambda,看来只有handler导出的脚本将被上传。即使您有多个脚本导出多个处理程序,Netlify似乎也将它们上载到隔离的“容器”(不同的AWS实例)中,这意味着这些脚本将无法在相对路径中看到彼此。免责声明:我仅使用免费帐户进行了测试,可能有一些我不知道的设置。

解决方法:

对于辅助脚本,将它们放入NPM包中,并在主脚本中分别添加到package.jsonrequire中。它们将被安装并可供使用。

对于静态文件,您可以像拥有AWS Lambda之前一样将它们托管在Netlify上,并发出http请求以获取主脚本中的文件。