база данных firestore не подключается к облачным функциям firebase - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь получить информацию из базы данных firestore через express js, используемую в облачных функциях firebase. мой index. js файлы внутри папки функции выглядят так:

 const functions = require('firebase-functions');
 const admin = require("firebase-admin");
 const db = admin.firestore();
 admin.initializeApp();
 const express = require('express');
 const app= express();

 app.get("/teacher/:uid",function(req,res){
    const id = req.params.uid;
    const doc = db.collection('users').doc(id).get();
    res.send(doc);
    //res.render("teacher",{id : id});
})

часть скрипта моего index. html файл выглядит так:

<body>

// some html code 
<!---script follow-->
<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
<script src="https://www.gstatic.com/firebasejs/7.14.2/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/7.14.2/firebase-auth.js"></script>
<script src="https://www.gstatic.com/firebasejs/7.14.2/firebase-firestore.js"></script>
<script src="https://www.gstatic.com/firebasejs/7.14.2/firebase-functions.js"></script>
<script>
  // web app's Firebase configuration
  var firebaseConfig = {
    apiKey: "xyz",
    authDomain: "xyz",
    databaseURL: "xyz",
    projectId: "xyz",
    appId: "xyz"
  };
  // i have replaced the actual keys and urls with xyz

  firebase.initializeApp(firebaseConfig);
  const auth= firebase.auth();
  const db= firebase.firestore();
  const functions = firebase.functions();

</script>

<script src="auth.js"></script>
</body>
-------------------

ERROR : по команде firebase serve --only functions, я получаю эту ошибку

Ошибка: приложение Firebase по умолчанию не существует. Убедитесь, что вы вызываете initializeApp () перед использованием какой-либо из служб Firebase. в FirebaseAppError.FirebaseError [как конструктор] (/home/chahat/Desktop/firebase/functions/node_modules/firebase-admin/lib/utils/error.js:42:28) в FirebaseAppError.PrefixedFirebaseError ([/ constructor] home / chahat / Desktop / firebase / functions / node_modules / firebase-admin / lib / utils / error. js: 88: 28) в новом FirebaseAppError (/ home / chahat / Desktop / firebase / functions / node_modules / firebase-admin /lib/utils/error.js:123:28) в FirebaseNamespaceInternals.app (/home/chahat/Desktop/firebase/functions/node_modules/firebase-admin/lib/firebase-namespace.js:101:19 ) в FirebaseNamespace.app (/home/chahat/Desktop/firebase/functions/node_modules/firebase-admin/lib/firebase-namespace.js:452:30) в FirebaseNamespace.ensureApp (/ home / chahat / Desktop / firebase /functions/node_modules/firebase-admin/lib/firebase-namespace.js:468:24) в Proxy.fn (/ home / chahat / Desktop / firebase / functions / node_modules / firebase-admin / lib / firebase-namespace . js: 327: 30) на Объекте. (/home/chahat/Desktop/firebase/functions/index.js:3:18) в Module._compile (internal / modules / cjs / loader. js: 1156: 30) в Object.Module._extensions. . js (internal / modules / cjs / loader. js: 1176: 10) ⚠ Нам не удалось загрузить код вашей функции. (см. выше)

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 07 мая 2020

Есть несколько частей, которые вам следует изменить в коде облачной функции:

 const functions = require('firebase-functions');
 const admin = require("firebase-admin");
 admin.initializeApp();

 const db = admin.firestore();   //#1

 const express = require('express');
 const app= express();

 app.get("/teacher/:uid",function(req, res){
    const id = req.params.uid;
    db.collection('users').doc(id).get()   //#2  
    .then(snap => {
        res.send(snap.data());
    })
    .catch(error => {...})
 })
  1. Определите Firestore как admin.firestore() после инициализации Admin SDK.
  2. Метод get() асинхронный. Вам нужно дождаться, пока Promise вернется к разрешению, прежде чем вы сможете вернуть ответ. Подробнее в do c: https://firebase.google.com/docs/firestore/query-data/get-data#get_a_document и https://firebase.google.com/docs/functions/video-series
...