#firebase #google-cloud-firestore #google-cloud-functions
#firebase #google-облако-firestore #google-cloud-функции
Вопрос:
Я запустил проект Firebase для бессерверного веб-приложения. Со стороны клиента я могу получить доступ к базе данных Firestore. С бессерверной стороны я написал функцию, которая будет вызываться по http-запросу. Функция пытается получить доступ к базе данных с помощью объекта Firestore, но это не удается, потому что объект Firestore не имеет функции collection (), как я думаю, она должна иметь. В выходных данных я показываю содержимое объекта Firestore.
const functions = require('firebase-functions');
exports.noteList = functions.https.onRequest((req, res) => {
db = functions.firestore;
console.dir(db);
db.collection("notes").listDocuments().then(documentRefs => {
return db.getAll(documentRefs);
}).then(documentSnapshots => {
res.json(documentSnapshots);
});
});
вывод:
{ provider: 'google.firestore',
service: 'firestore.googleapis.com',
defaultDatabase: '(default)',
document: [Function: document],
namespace: [Function: namespace],
database: [Function: database],
_databaseWithOpts: [Function: _databaseWithOpts],
_namespaceWithOpts: [Function: _namespaceWithOpts],
_documentWithOpts: [Function: _documentWithOpts],
DatabaseBuilder: [Function: DatabaseBuilder],
NamespaceBuilder: [Function: NamespaceBuilder],
snapshotConstructor: [Function: snapshotConstructor],
beforeSnapshotConstructor: [Function: beforeSnapshotConstructor],
DocumentBuilder: [Function: DocumentBuilder] }
Function crashed
TypeError: db.collection is not a function
Для сравнения, вот как я получаю доступ к базе данных со стороны клиента, это работает:
function main() {
var db = firebase.firestore();
db.collection("global").doc("public").get().then(
function(r) {
var number_span = document.getElementById("number_span");
data = r.data();
number_span.textContent = "" data.counter;
});
}
Конечно, объект firebase получается разными способами. Возможно, какая-то конфигурация отсутствует?
Ответ №1:
Для доступа к Firestore необходимо использовать Firestore SDK (обычно через Firebase Admin SDK). Пакет облачных функций SDK (firebase-functions) не делает этого за вас. Все, что он делает, это помогает вам указать функции, которые вы хотите развернуть. В теле функции должен использоваться Firestore SDK.
// require and initialize the admin SDK
const admin = require('firebase-admin');
admin.initializeApp();
// now use the SDK in the body of the function
admin.firestore().collection(...).doc(...)
Пакет Admin SDK просто включает в себя Cloud Firestore Node SDK, поэтому используйте его ссылку для навигации по API.