node.js - Firebase 功能 - 错误,但控制台中没有事件消息

标签 node.js firebase google-cloud-functions firebase-storage

我在 firebase 上编写了一个函数,该函数从 firebase 存储下载图像 (base64) 并将其作为响应发送给用户:

const functions = require('firebase-functions');
import os from 'os';
import path from 'path';
const storage = require('firebase-admin').storage().bucket();

export default functions.https.onRequest((req, res) => {
    const name = req.query.name;

    let destination = path.join(os.tmpdir(), 'image-randomNumber');
    return storage.file('postPictures/' + name).download({
        destination
    }).then(() => {
        res.set({
            'Content-Type': 'image/jpeg'
        });
        return res.status(200).sendFile(destination);
    });
});

我的客户端多次(连续)调用该函数来加载一系列图像进行显示,大约。 20,平均大小为 4KB。

加载 10 张左右的图片(数量不同)后,所有其他图片都会失败。原因是我的函数没有正确响应,并且 firebase 控制台显示我的函数抛出了错误:

enter image description here

上图显示

  1. 对函数(称为“PostPictureView”)的请求成功
  2. 随后,向 Controller 发出的三个请求均失败
  3. 最终,在对“UserLogin”函数执行新请求后,也失败了。

给客户端的响应是默认的“错误:无法处理请求”。等待几秒钟后,所有请求都会按预期再次得到处理。

我最好的猜测:

  • 该项目是免费的,也许谷歌正在限制某些东西? (据我所知,我没有达到任何限制)
  • Google Firebase 控制台可以处理的消息是否有限制?
  • 函数应用程序中的 tmpdir 是否会运行不足?到目前为止,我从未删除过临时文件,但希望 Google 会自动删除它们,或者以不同的方式警告我空间不足。

有人知道接收错误消息的替代方法,或者遇到过类似的问题吗? (由于 Firebase Functions 仍处于测试阶段,这也可能是 Google 的错误)

顺便说一句:直接从客户端(android应用程序,react-native)下载图像是不可能的,因为稍后我将使用该功能检查访问权限。这个问题对我来说是可以重现的。

最佳答案

在 Cloud Functions 中,/tmp 目录为 backed by memory 。因此,您下载的每个文件都会有效地占用运行该函数的服务器实例上的内存。

Cloud Functions 可以重复使用服务器实例来重复调用同一函数。这意味着您的函数在每次调用时都会下载另一个文件(到同一实例)。由于每次文件的名称都不同,因此您在/tmp 中积累了每个占用内存的文件。

在某些时候,该服务器实例将耗尽/tmp 中所有这些文件的内存。这很糟糕。

最佳实践是always clean up files after you're done with them 。更好的是,如果您可以将文件内容从 Cloud Storage 流式传输到客户端,您将使用更少的内存 ( and be billed even less for the memory-hours you use )。

关于node.js - Firebase 功能 - 错误,但控制台中没有事件消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49375332/

相关文章:

javascript - NodeJs - 通过条件语句将值传递给回调并获取值

javascript - 上传图片到火力地堡

angularjs - 如何正确实现 angularFireAuth?

java - 云中的 Firebase JobScheduling |如何使用服务器 SDK 进行作业调度

node.js - Google Cloud Function 部署错误 : provided function is not a loadable module

javascript - Firebase 功能测试初始化​​失败

node.js - 如何使用 Firebase 云函数 Node.js 访问 Firebase 存储

node.js - 环回中的多个包含模型

node.js - 在 EJS 中将变量呈现为 HTML

android - Retrofit 收到 400 错误请求,但与 postman 一起使用