У меня есть облачная функция Firebase, которая становится недоступной примерно на 30 секунд после каждый раз, когда повторно развертывается . В течение 30 секунд возвращается 500 Error: could not handle the request
. Примерно через 30 секунд он работает нормально.
Я сократил функцию до простого примера, который воспроизводит ошибку. Кажется, ошибка возникает, когда требуется googleapis
и функция делает запрос в firestore. Удаление оператора googleapis
require или , запрос пожарного депо устраняет ошибку.
googleapis или firebase-admin не совместимы с облачными функциями? Как я могу написать функцию, которая использует оба?
index.js
const functions = require('firebase-functions');
const express = require('express');
const admin = require('firebase-admin');
const pack = require('./package.json');
const {google} = require('googleapis');
admin.initializeApp();
const app = express();
app.post('/', (req, res) => {
const name = req.body.name || 'unknown';
admin.firestore().doc('settings/doesnotexist').get()
.then(ref => {
res.send({
message: `Hello ${name}. Exists: ${ref.exists}`,
version: pack.version,
});
});
});
exports.testDeployCody = functions.https.onRequest(app);
package.json
{
"version": "0.1.56",
"name": "functions",
"description": "Cloud Functions for Firebase",
"scripts": {
"serve": "firebase serve --only functions",
"shell": "firebase functions:shell",
"start": "npm run shell",
"deploy": "firebase deploy --only functions:testDeployCody",
"logs": "firebase functions:log"
},
"dependencies": {
"express": "^4.16.3",
"firebase-admin": "^5.12.1",
"firebase-functions": "^1.1.0",
"googleapis": "^30.0.0",
"lodash": "^4.17.10"
},
"devDependencies": {
"firebase-tools": "^3.19.1"
}
}
Шаги для воспроизведения:
- Развернуть облачную функцию (я использую
npm run deploy
)
- Проверка работоспособности функции через HTTPS
- Увеличение пакета. Json версия
- Повторно развернуть функцию
- После того, как инструменты firebase сообщат
Deploy Complete!
, несколько раз протестируйте функцию через HTTPS, чтобы увидеть сообщение об ошибке