node.js - Firestore 数据库未与 Firebase 云功能连接
问题描述
我正在尝试通过 Firebase 云功能中使用的 Express.js 检索 Firestore 数据库信息。我在函数文件夹中的 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 :
on command firebase serve --only functions , i am getting this error
Error: The default Firebase app does not exist. Make sure you call initializeApp() before using any of the Firebase services.
at FirebaseAppError.FirebaseError [as constructor] (/home/chahat/Desktop/firebase/functions/node_modules/firebase-admin/lib/utils/error.js:42:28)
at FirebaseAppError.PrefixedFirebaseError [as constructor] (/home/chahat/Desktop/firebase/functions/node_modules/firebase-admin/lib/utils/error.js:88:28)
at new FirebaseAppError (/home/chahat/Desktop/firebase/functions/node_modules/firebase-admin/lib/utils/error.js:123:28)
at FirebaseNamespaceInternals.app (/home/chahat/Desktop/firebase/functions/node_modules/firebase-admin/lib/firebase-namespace.js:101:19)
at FirebaseNamespace.app (/home/chahat/Desktop/firebase/functions/node_modules/firebase-admin/lib/firebase-namespace.js:452:30)
at FirebaseNamespace.ensureApp (/home/chahat/Desktop/firebase/functions/node_modules/firebase-admin/lib/firebase-namespace.js:468:24)
at Proxy.fn (/home/chahat/Desktop/firebase/functions/node_modules/firebase-admin/lib/firebase-namespace.js:327:30)
at Object.<anonymous> (/home/chahat/Desktop/firebase/functions/index.js:3:18)
at Module._compile (internal/modules/cjs/loader.js:1156:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1176:10)
⚠ We were unable to load your functions code. (see above)
解决方案
您应该在 Cloud Function 代码中更改几个部分:
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 => {...})
})
- 在初始化 Admin SDK
admin.firestore()
之后定义 Firestore 。 - 该
get()
方法是异步的。您需要等待 Promise 的返回解决,然后才能返回响应。文档中的更多详细信息:https ://firebase.google.com/docs/firestore/query-data/get-data#get_a_document和https://firebase.google.com/docs/functions/video-series
推荐阅读
- android - 为 Facebook screenshot-tests-for-android 设置 gradle 插件的问题
- css - 调整窗口大小时 CSS 滚动捕捉是否总是中断?
- machine-learning - 将逻辑回归模型拟合到 MNIST 数据需要很长时间
- python - 如何将节点放置在特定位置 - networkx
- c# - Xero 会计发票对象未设置为参考
- javascript - 如何用函数链中的空字符串替换数据库中的空值
- scala - 在 scala 中,为什么 Range.hashCode() 这么慢并且不能更快?
- algorithm - 给定二维坐标系中的一组点,如果我们只访问所有点一次,如何计算最小距离和路径?
- excel - Excel-更改表格数据以规范化数据
- dotnet-cli - EF Core 2.2 脚手架现有数据库和延迟加载