javascript - 使用 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
,此外,我怀疑它是否会有所帮助,因为我仍然会在构建时间之后访问文件系统。
有没有其他人遇到过这个问题?
解决方案
在编写此答案时(2019 年 9 月),Netlify 似乎没有将辅助文件上传到 AWS Lambda,似乎只会handler
上传导出的脚本。即使您有多个脚本导出多个处理程序,Netlify 似乎也会将它们上传到隔离的“容器”(不同的 AWS 实例)中,这意味着脚本将无法在相对路径中看到彼此。免责声明:我只使用免费帐户进行了测试,可能存在我不知道的设置。
解决方法:
对于辅助脚本,将它们制作成NPM
包,添加到package.json
主require
脚本中。它们将被安装并可供使用。
对于静态文件,您可以像在拥有 AWS Lambda 之前一样将它们托管在 Netlify 上,并发出http
请求以获取主脚本中的文件。
推荐阅读
- java - Spring批处理IllegalStateException进行更新
- java - 调整基本足球模拟算法
- python - 如何在 PYQT5 菜单栏中同时显示图标和文本
- javascript - Vue.set 更新 Vuex 存储中复制的对象
- python - 在 Django 中基于类的视图中转换函数视图
- javascript - 将 1 个 JS If 语句应用于多个 HTML ID
- r - 使用 mutate 和 recode 函数的语法有什么问题?
- python - 递归符号计算 - 提高性能
- cordova - 我可以将当前版本的 Ionic CLI 和 Cordova 用于 ionic-1 项目吗?
- heroku - 删除 h 用户名后,带有 Django 频道的 Heroku Redis 不再工作