gpt4 book ai didi

node.js - GCP Cloud Function 从 Cloud Storage 读取文件

转载 作者:太空宇宙 更新时间:2023-11-03 22:58:12 24 4
gpt4 key购买 nike

我是 GCP、Cloud Functions 和 NodeJS 生态系统的新手。任何指示都会非常有帮助。

我想编写一个执行以下操作的 GCP 云函数:

  1. 读取 Google Cloud Storage 中保存的文件 (sample.txt) 的内容。
  2. 将其复制到本地文件系统(或只是 console.log() )
  3. 在本地使用函数模拟器运行此代码进行测试

结果:500 内部错误,消息“函数崩溃”。函数日志给出以下消息

2019-01-21T20:24:45.647Z - info: User function triggered, starting execution
2019-01-21T20:24:46.066Z - info: Execution took 861 ms, finished with status: 'crash'

下面是我的代码,主要选自 GCP NodeJS 示例代码和文档。

exports.list_files = (req, res) => {
const fs = require('fs');
const {Storage} = require('@google-cloud/storage');
const storage = new Storage();
const bucket = storage.bucket('curl-tests');
bucket.setUserProject("cf-nodejs");
const file = bucket.file('sample.txt'); // file has couple of lines of text

const localFilename = '/Users/<username>/sample_copy.txt';

file.createReadStream()
.on('error', function (err) { })
.on('response', function (response) {
// Server connected and responded with the specified status and
headers.
})
.on('end', function () {
// The file is fully downloaded.
})
.pipe(fs.createWriteStream(localFilename));
}

我是这样跑的:

functions call list_files --trigger-http 

ExecutionId: 4a722196-d94d-43c8-9151-498a9bb26997
Error: { error:
{ code: 500,
status: 'INTERNAL',
message: 'function crashed',
errors: [ 'socket hang up' ] } }

最终,我希望将证书和 key 保存在存储桶中,并使用它们对 GCP 外部的服务进行身份验证。这是我试图解决的更大问题。但目前,重点是解决崩溃问题。

最佳答案

使用 node 在桌面上开始开发和调试而不是模拟器。一旦您的代码在没有警告和错误的情况下运行,然后开始使用模拟器,最后使用 Cloud Functions。

让我们获取您的代码并修复其中的部分内容。

bucket.setUserProject("cf-nodejs");

我怀疑你的项目是cf-nodejs 。输入正确的项目 ID。

const localFilename = '/Users/<username>/sample_copy.txt';

这行不通。您没有目录/Users/<username>在云函数中。您可以写入的唯一目录是 /tmp 。出于测试目的,将此行更改为:

const localFilename = '/tmp/sample_copy.txt';

您没有为错误做任何事情:

.on('error', function (err) { })

更改此行至少打印一些内容:

.on('error', function (err) { console.log(err); })

然后,您将能够在 Google Cloud Console -> 堆栈驱动程序 -> 日志中查看输出。 Stack Driver 支持选择“云函数”-“您的函数名称”,以便您可以看到调试输出。

最后一个提示,将代码包装在 try/except block 中,并在 except block 中使用 console.log 记录错误消息。这样当你的程序在云端崩溃时你至少会有一个日志条目。

关于node.js - GCP Cloud Function 从 Cloud Storage 读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54297465/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com