Firebase 存储和云功能 - ECONNRESET

Oli*_*erH 5 google-cloud-storage firebase google-cloud-functions firebase-storage

我开发了一个 Firebase Cloud 函数,可以对上传的图像进行多种操作。我的代码基于这篇文档文章这个云函数示例。因此,它使用Google Cloud Storage 包

它几乎一直工作正常,但有时在上传到存储或从存储中删除时会出现此错误:

 Error: read ECONNRESET
    at exports._errnoException (util.js:1026:11)
    at TLSWrap.onread (net.js:569:26)
Run Code Online (Sandbox Code Playgroud)

我正在使用我的应用程序的默认存储桶,由 引用event.data.bucket

如果您需要其他信息或代码片段,请告诉我,即使我的代码非常接近我之前链接的函数示例。

我发现了这个 GitHub 问题,但我检查过我每次都返回一个承诺。例如,以下是触发错误的删除部分:

索引.js

 Error: read ECONNRESET
    at exports._errnoException (util.js:1026:11)
    at TLSWrap.onread (net.js:569:26)
Run Code Online (Sandbox Code Playgroud)

example_function.js

exports.exampleFunction = functions.storage.object().onChange(event => {
    return f_thumbnails.exampleFunction(event);
});
Run Code Online (Sandbox Code Playgroud)

Ada*_*dam 2

google-cloud-node这似乎与库对套接字的处理以及 Cloud Functions 环境中的默认套接字超时有关。

用户验证的一种解决方案是修改库调用的方式requests,不要通过指定使套接字永远保持打开状态forever: false,例如。

var request = require('request').defaults({
  timeout: 60000,
  gzip: true,
  forever: false,
  pool: {
    maxSockets: Infinity
  }
});
Run Code Online (Sandbox Code Playgroud)

这是硬编码在packages/common/src/utils.js中,因此您需要将修改后的库的副本提供到您的项目中,而不是将其作为 NPM 依赖项包含在内。有关该问题的更多详细信息以及应用了补丁的分支的链接,请参阅相关的公共问题