Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firebase HTTP云功能-读取数据库一次_Javascript_Firebase_Firebase Realtime Database_Google Cloud Functions - Fatal编程技术网

Javascript Firebase HTTP云功能-读取数据库一次

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; // ... }); 但是,云功能示例包

我有一个Firebase HTTPs功能。该函数需要根据查询参数从Firebase数据库读取一个值,并根据该数据返回一个结果

Firebase JS SDK表示要使用以下方法进行此操作:

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
    模块,允许您的函数调用数据库
由于您有一个HTTP函数,因此您应该触发:

然后在函数中,您可以通过以下方式访问数据库:

因此,总的来说:

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>`
        );
     });
});