Документы Firebase для пространства имен functions.https
показывают, что функция принимает объект express.Request
и объект express.Response
. Нигде не упоминается, что вы можете передать объект экспресс-сервера в functions.https.onRequest
. Тем не менее, я обнаружил, что люди делали это без каких-либо четких указаний от комментаторов, что это не должно быть сделано (за исключением одного человека в потоке functions-samples
репо № 101)
см
-
firebase-functions
https://github.com/firebase/firebase-functions/issues/27 -
functions-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);