名称空间的的Firebase文档显示该函数接受express.Request
对象和express.Response
对象。它没有提到你可以将一个快速服务器对象传递给functions.https.onRequest
。然而,我发现,人们已经从评论者没有明确的迹象表明这不应该做的(除了一个人在functions-samples
回购问题#101线程)这样用于Firebase和Express的云功能
见:
firebase-functions
https://github.com/firebase/firebase-functions/issues/27functions-samples
中间件 https://github.com/firebase/functions-samples/blob/master/authorized-https-endpoint/functions/index.js
我的问题是,那么:
- Firebase或GCP云功能的云端函数如何处理在函数定义之外初始化的对象的生命周期?
- 上面是如何影响函数的生命周期的?它是否运行到超时或功能类似于AWS Lambda?
澄清1 & 2:在LAMBDA导出的函数之外的任何资源时在相同的LAMBDA实例的所有后续调用使用,而功能实例是“暖”。这意味着函数的响应时间不会受到任何复杂的初始化代码的负面影响,因为它是每个“热”实例完成的。在这个例子中,它不需要每次调用初始化一个ExpressJS服务器,只需要一次,而该函数是“温暖”的。我很好奇云功能是否也一样?
同样在Lambda中,ExpressJS服务器的存在不会延长函数的执行时间(当它返回完成时),我也很好奇这里是如何实现云功能的。它是否与Lambda一样,或者(因为它可能会以不同的方式处理现有对象)是否会执行其他操作?
functions.https.onRequest
文档未指定您可以将ExpressJS服务器对象传递给它,那么这是如何工作的?那么是否有两个端点?有人可以解释这里发生了什么吗?
澄清3:我已经看到的人做到以下几点:
// './functions/index.js'
var functions = require("firebase-functions");
const express = require("express");
// setup ExpressJS Server
const expressRouter = new express.Router();
expressRouter.get("*", (req, res) => {
res.send(`Hello from Express in Cloud Functions for Firebase`);
});
// Cloud Function
exports.express = functions.https.onRequest(expressRouter);
,并希望知道这个作品是如何提供的云功能API只指定接受functions.https.onRequest(request, response)
PARAMS模仿ExpressJS API。
这些参数是基于快速Request和Response对象 - firebase.google.com/docs/functions/http-events
由于所有的问题涉及到代码的单一片段,这一次用例我认为它会更好地回答在一起。
感谢提前:)
请注意,使用中间件会在[文档](https://firebase.google.com/docs/functions/http-events#use_middleware_modules_with_cloud_functions)和[函数示例中](https:// github。 COM /火力/函数的样品)。 – Kato
您的声明“API仅指定在ExpressJS API之后建模的接受functions.https.onRequest(请求,响应)参数。”并不完全准确。从Firebase云端函数文档中,它们实际上传递了一个函数(箭头函数),而不仅仅是请求和响应参数。 –