gpt4 book ai didi

Firebase 存储和云功能 - ECONNRESET

转载 作者:行者123 更新时间:2023-12-01 06:15:35 25 4
gpt4 key购买 nike

我开发了一个 Firebase Cloud 函数,可以处理对上传图像的多种操作。
我的代码基于 this documentation articlethis Cloud Function example .因此,它使用 Google Cloud Storage package .

它几乎一直工作正常,但有时我在上传到 Storage 或从 Storage 删除时收到此错误:

 Error: read ECONNRESET
at exports._errnoException (util.js:1026:11)
at TLSWrap.onread (net.js:569:26)

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

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

我找到了 this GitHub issue ,但我检查了我每次都返回一个 promise 。例如,这里是触发错误的删除部分:

index.js

exports.exampleFunction = functions.storage.object().onChange(event => {
return f_thumbnails.exampleFunction(event);
});

example_function.js

module.exports = exports = function (_admin, _config) {
admin = _admin;
config = _config;

return {
"exampleFunction": function (event) {
return exampleFunction(event);
}
};
};

const exampleFunction = function (event) {
const gcsSourceFilePath = event.data.name;
const gcsSourceFilePathSplit = gcsSourceFilePath.split('/');
const gcsBaseFolder = gcsSourceFilePathSplit.length > 0 ? gcsSourceFilePathSplit[0] : '';
const gcsSourceFileName = gcsSourceFilePathSplit.pop();
const gceSourceFileDir = gcsSourceFilePathSplit.join('/') + (gcsSourceFilePathSplit.length > 0 ? '/' : '');

// Not an image
if (!event.data.contentType.startsWith('image/')) {
console.log('Not an image !');
return;
}

// Thumbnail
if (gcsSourceFileName.startsWith(config.IMAGES_THUMBNAIL_PREFIX)) {
console.log('Thumbnail !');
return;
}

const bucket = gcs.bucket(event.data.bucket);
const gcsThumbnailFilePath = gceSourceFileDir + config.IMAGES_THUMBNAIL_PREFIX + gcsSourceFileName;


// File deletion
if (event.data.resourceState === 'not_exists') {
console.log('Thumbnail deletion : ' + gcsThumbnailFilePath);
return bucket.file(gcsThumbnailFilePath).delete().then(() => {
console.log('Deleted thumbnail ' + gcsThumbnailFilePath);
});
}
...

最佳答案

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

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

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

这是硬编码在 packages/common/src/utils.js ,因此您需要将修改后的库的副本提供给您的项目,而不是将其作为 NPM 依赖项包含在内。见 related public issue有关该问题的更多详细信息以及指向 patch applied 的分支的链接.

关于Firebase 存储和云功能 - ECONNRESET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43224994/

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