Javascript Firebase HTTP云功能-读取数据库一次
我有一个Firebase HTTPs功能。该函数需要根据查询参数从Firebase数据库读取一个值,并根据该数据返回一个结果 Firebase JS SDK表示要使用以下方法进行此操作:Javascript Firebase HTTP云功能-读取数据库一次,javascript,firebase,firebase-realtime-database,google-cloud-functions,Javascript,Firebase,Firebase Realtime Database,Google Cloud Functions,我有一个Firebase HTTPs功能。该函数需要根据查询参数从Firebase数据库读取一个值,并根据该数据返回一个结果 Firebase JS SDK表示要使用以下方法进行此操作: return firebase.database().ref('/users/' + userId).once('value').then(function(snapshot) { var username = snapshot.val().username; // ... }); 但是,云功能示例包
return firebase.database().ref('/users/' + userId).once('value').then(function(snapshot) {
var username = snapshot.val().username;
// ...
});
但是,云功能示例包括:
var functions = require('firebase-functions');
functions.database.ref('/');
但是DB引用没有方法once
,只有onWrite
()。这显然是针对DB写函数,而不是HTTP函数
在HTTP函数中是否有正确的方法从数据库读取一次数据?我可以使用普通的Firebase SDK,还是有更好的方法
谢谢。您混淆了两个部分:
模块,其中包含基于firebase functions
functions.database.ref('/path').onWrite()的数据库调用触发的逻辑
模块,允许您的函数调用数据库firebase admin
exports.date = functions.https.onRequest((req, res) => {
admin.database().ref('/users/' + userId).once('value').then(function(snapshot) {
var username = snapshot.val().username;
res.status(200).send(username);
});
});
请注意,这是一个棘手的模式。对数据库的调用是异步进行的,可能需要一些时间才能完成。在等待过程中,HTTP功能可能会超时,并被Google云功能系统终止。看
作为一般规则,我建议使用Firebase数据库SDK或其REST API来访问数据库,而不要依赖HTTP函数作为中间件。我在这里找到了一个解决方案,该解决方案结合了如何从Michael Blight处获取参数和答案 这里的答案还显示了使用firebase admin所需的内容 在调用我的project.firebaseapp.com/event/123/时,以下内容对我有效
var functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.showEvent = functions.https.onRequest((req, res) => {
const params = req.url.split("/");
const eventId = params[2];
return admin.database().ref('events/' + eventId).once('value', (snapshot) => {
var event = snapshot.val();
res.send(`
<!doctype html>
<html>
<head>
<title>${event.name}</title>
</head>
<body>
<h1>Title ${event. name} in ${event.city}</h1>
</body>
</html>`
);
});
});
var functions=require('firebase-functions');
const admin=require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.showEvent=functions.https.onRequest((请求、回复)=>{
const params=req.url.split(“/”);
const eventId=params[2];
返回admin.database().ref('events/'+eventId).once('value',(快照)=>{
var event=snapshot.val();
res.send(`
${event.name}
${event.city}中的标题${event.name}
`
);
});
});
firebase管理员是否在函数中自动进行身份验证?我需要从数据库中获取信息,并根据数据呈现HTML部分,因此很遗憾,使用Firebase DB REST api在这里不是一个真正的选项。我认为您的答案中缺少一些返回。获取有关预期返回或try/catch块的承诺的ESLint错误。它也应该是admin.database
,因为在firebase函数中使用const admin=require('firebase-admin')代码>@Badrush,你不知道你帮我节省了多少工作时间。如果没有admin.database().ref(…),它会不断给出errors@user3833732我和你在同一个地方。花了整整两天的时间试图找出如何获取firebase函数,从数据库获取数据,然后从firebase存储中提供文件。最后,事情开始变得有意义了,我发现了这个错误。很高兴我能帮上忙=)我怎样才能得到最后返回的数据?我不明白
exports.date = functions.https.onRequest((req, res) => {
admin.database().ref('/users/' + userId).once('value').then(function(snapshot) {
var username = snapshot.val().username;
res.status(200).send(username);
});
});
var functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.showEvent = functions.https.onRequest((req, res) => {
const params = req.url.split("/");
const eventId = params[2];
return admin.database().ref('events/' + eventId).once('value', (snapshot) => {
var event = snapshot.val();
res.send(`
<!doctype html>
<html>
<head>
<title>${event.name}</title>
</head>
<body>
<h1>Title ${event. name} in ${event.city}</h1>
</body>
</html>`
);
});
});