javascript - ENOENT:没有这样的文件或目录,打开 '/var/task/google-cloud-key.json' Vercel
问题描述
请帮我解决..
我的JS file
文件在 Next JS 应用程序根文件夹中,Next JS app > pages/api/profile
并且在 package.json 所在的位置。google-cloud-key.json
在本地一切正常,但低于 Vercel 给出的错误
ENOENT: no such file or directory, open '/var/task/google-cloud-key.json' vercel
我的 google-cloud-key.json 位于下一个 JS 应用程序的根目录中。
我也试过下面的代码:
const storage = new Storage({
projectId: 'careful-relic-319511',
keyFilename: __dirname + '/../../../google-cloud-key.json'
});
这现在给出以下错误:
ENOENT: no such file or directory, open '/var/task/.next/server/google-cloud-key.json'] {\n errno: -2,\n code: 'ENOENT',\n syscall: 'open',\n path: '/var/task/.next/server/google-cloud-key.json'\n}\nEND
解决方案
嘿,我找到了一个很好的解决方案
Base64 对 json 文件进行编码。(https://www.base64encode.org/)
设置一个 env 变量(在本地和 vercel 设置中)这个编码的字符串。(在我的情况下是 GCP_CRED_FILE)
const gcsKey = JSON.parse(
Buffer.from(process.env.GCP_CRED_FILE, 'base64').toString()
);
const storage = new Storage({
credentials: {
client_email: gcsKey.client_email,
private_key: gcsKey.private_key
},
projectId: gcsKey.project_id
});
这对我有用。使用 nextjs 11 和 vercel 部署进行了测试
此外,您不需要将文件存储或推送到存储库或存储它(这可能是一个安全威胁)
推荐阅读
- java - 春季 3 + JPA + 汤姆猫 7
- monogame - monogame.extended.entities 命名空间中没有世界`
- r - 在插入符号中绘制 ctree 方法决策树,删除下面不需要的条形图
- javascript - 按字段值宽度获取和过滤数组中的图像
- c++ - 使用逗号运算符和可变参数模板参数包的折叠表达式
- python - 从 Tkinter 文本字段中获取列表,检查重复项并删除任何
- python - 从选定数量的行中查找局部最大值
- angular - 函数中多个可观察调用的返回值
- swift - 如何在 Swift 中避免 Firebase noSQL db 中的循环依赖?
- excel - 显示最近使用的单元格的宏