【问题标题】:How to get response from firebase function to firebase static index.html如何从firebase函数获得对firebase静态index.html的响应
【发布时间】:2019-05-24 05:59:07
【问题描述】:

我正在尝试在 index.html 的 firebase 静态文件中获取我的 firebase 数据库响应。 在firebase index.js中,我正在获取数据库并通过getUsers方法返回所有引用,然后通过promise(then)方法从getusers获取响应,将我的res.send(res)发送到firebase静态文件的index.html。但在 getajax 调用中的数据参数中没有得到任何响应,但在状态参数中获得了成功状态。

     firebase folder structure
      functions
             |_ index.js
      public
            |_index.html
Index.html -- firebase public index.hmlt 

           <script>

            const _url_prod = "https://nodejs-fef5b.firebaseapp.com/get";

             $('button').click(function(){
               $.get(_url_prod,(data,status)=>{
                       console.log("data",data);
                       console.log("status",status)
              })
            </script>


index.js-- firebase function folder has index.js


var admin = require("firebase-admin");
var serviceAccount = require("./serviceAccountKey.json");
const firebaseApp = admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://nodejs-crud-12758.firebaseio.com"
});
const functions = require('firebase-functions');
const express = require('express');
const  app = express();

async function getUsers(){
    const ref = await firebaseApp.database().ref('users');
    return  ref.once('value').then(data => {
          data.val();
        })
}
app.get('/get',(req,res)=>{
   getUsers().then(items => {
       res.send(items);
    });
})
exports.app = functions.https.onRequest(app);
```

【问题讨论】:

    标签: node.js firebase firebase-realtime-database


    【解决方案1】:

    索引.html:

    <script
    src="https://code.jquery.com/jquery-3.4.1.min.js"
      integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
      crossorigin="anonymous"></script>
    
    
    <script>
    $.get('http://192.168.56.1:5555/get', (data, success) => {
        console.log(data);
        console.log(success);
    })
    </script>
    

    你的脚本:

    async function getUsers() {
        return await 
            admin.database().ref('Users').once('value').then((snapshot) => {
            return snapshot.val();
        }).catch((error) => {
            console.log(error);
        })
    }
    app.get('/get', (req, res, next) => {
        getUsers().then((result) => {
            console.log(result);
            res.send(result);
        })
    })
    

    这对我有用。 希望对你有帮助

    【讨论】:

    • 如果您在箭头函数中添加返回,它是否有效? const ref = await firebaseApp.database().ref('users'); return ref.once('value').then(data =&gt; { return data.val(); })
    • app.get 中的console.log() 是否退货?如果没有检查您的功能并显示结果。请在 app.get 和 getUsers() 中使用 console 的一些结果更新您的帖子。
    • 这意味着您的退货将等到您的查询完成。所以在那之后你的变量里面应该有一些东西:const variable = firebaseApp.database().ref('users').once('value'); 然后如果你做console.log(variable.val()); 或者只是console.log(variable);,你应该得到一个输出。如果不检查您的查询。
    • 我创建了一个项目并更新了我的帖子。代码正在运行。
    • 我的数据库有用户集合,其中 userdoc 有字段......但不知道数据库有什么问题。所以这在 database().ref('users') 中为空。感谢您的代码..
    猜你喜欢
    • 2018-07-19
    • 1970-01-01
    • 1970-01-01
    • 2019-05-16
    • 2021-08-31
    • 2019-01-13
    • 2020-04-15
    • 2018-11-24
    相关资源
    最近更新 更多