как получить доступ к firestore из функций firebase - PullRequest
0 голосов
/ 12 марта 2019

Я запустил проект 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 Ответ

1 голос
/ 12 марта 2019

Вам необходимо использовать Firestore SDK (обычно через Firebase Admin SDK ) для доступа к Firestore.Cloud Functions 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...