当前位置: 首页 > 知识库问答 >
问题:

Firebase从云函数API保存到数据库

龙令雪
2023-03-14

我编写了一个Firebase云函数,可以通过REST API访问该函数。代码如下所示。

我需要做的是,当用户通过“Web服务URL”从前端提交一些值时。

1)我需要将这些数据保存在Firebase实时数据库中。

2.)我参考了网上的几个教程,不明白var ref=db.ref(“服务器/保存数据/Fireblog”);在下面的代码中做了什么。

const functions = require('firebase-functions');
const gcs = require('@google-cloud/storage')();
const os = require("os");
const path = require("path");
const cors = require("cors")({ origin: true });
var admin = require("firebase-admin");

var serviceAccount = require("./My-Service.json");
// Initialize the app with a service account, granting admin privileges
admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://my-xx0xx.firebaseio.com/"
});

// As an admin, the app has access to read and write all data, regardless of Security Rules
var db = admin.database();
var ref = db.ref("server/saving-data/fireblog");


exports.uploadFile = functions.https.onRequest((req, res) => {
      cors(req, res, () => {
        var usersRef = ref.child("users");
usersRef.set({
  alanisawesome: {
    date_of_birth: "June 23, 1912",
    full_name: "Alan Turing"
  },
  gracehop: {
    date_of_birth: "December 9, 1906",
    full_name: "Grace Hopper"
  }
});

        if (req.method !== 'POST') {
        return res.status(500).json({
            message: 'Not allowed'
        });
    }
    res.status(200).json({
        message: req.body
    });
      });

});

共有1个答案

赵英哲
2023-03-14

您的代码确实将数据写入数据库,位于server节点(位置)下。数据库中的结果如下(从Firebase控制台导出):

  "server" : {
    "saving-data" : {
      "fireblog" : {
        "users" : {
          "alanisawesome" : {
            "date_of_birth" : "June 23, 1912",
            "full_name" : "Alan Turing"
          },
          "gracehop" : {
            "date_of_birth" : "December 9, 1906",
            "full_name" : "Grace Hopper"
          }
        }
      }
    }
  }

所以,基本上,问题1的答案是:“它被保存了”。

问题#2:值db.ref(服务器/保存数据/Fireblog)引用的实例,它"表示数据库中的特定位置,可用于读取或写入数据到该数据库位置",请参阅https://firebase.google.com/docs/reference/js/firebase.database.Reference

var usersRef=ref.child("用户");也是一个引用,您可以通过child()方法获得,请参阅https://firebase.google.com/docs/reference/js/firebase.database.Reference#child

因此,当您执行usersRef时,通过组合初始引用和子方法。设置({})您写入以下路径:服务器/保存数据/fireblog/用户。这就是上面数据库导出中反映的内容。

请注意,使用您当前的代码,您将始终在位置写入相同的数据,即以下对象:

{
  alanisawesome: {
    date_of_birth: "June 23, 1912",
    full_name: "Alan Turing"
  },
  gracehop: {
    date_of_birth: "December 9, 1906",
    full_name: "Grace Hopper"
  }
}

同样,这反映在上面的数据库导出中。

有了这样一个通过HTTPS调用的云函数,您可以在HTTP请求主体中获得想要写入数据库的数据。

最后一点:我将重新组织您的职能如下:

const db = admin.database();
const ref = db1.ref("server/saving-data/fireblog");

exports.uploadFile = functions.https.onRequest((req, res) => {
    cors(req, res, () => {
        const usersRef = ref.child("users");

        if (req.method !== 'POST') {
            return res.status(500).json({
                message: 'Not allowed'
            })
        } else {
            return usersRef.set({
                alanisawesome: {
                    date_of_birth: "June 23, 1912",
                    full_name: "Alan Turing"
                },
                gracehop: {
                    date_of_birth: "December 9, 1906",
                    full_name: "Grace Hopper"
                }
            }).then(() => {
                res.status(200).json({
                    message: req.body
                });
            }).catch(error => {
                return res.status(500).send(error);
            })
        }

    })

});

最后,我建议你看看以下来自Firebase团队的视频:https://www.youtube.com/watch?v=7IkUgCLr5oA

 类似资料:
  • 当我的数据库用“photo_url”字段更新时,我想下载图像并将其保存到存储区

  • Im使用firebase,由于某些原因,我的代码没有推送数据,并且Im没有在firebase URL中看到数据。我的密码是这样的 我得到警报“保存”,但我无法在firebase URL中找到数据。 此外,为Firebase中的每个url提供的API键有什么用途。 更新:这种情况发生在IE10中。在其他浏览器中,它工作得很好

  • 我正在创建一个应用程序,它使用两步对象创建到firebase实时数据库。 我想要的是,在一个捕获onCreate事件的云函数上,如果一些规则不完整,那么create操作就会被停止。 有办法做到这一点吗?或者我需要移除节点而不是拒绝创建? 谢谢你!

  • 如何获得下载URL? 我有点糊涂了。现在,我被困在修改后的功能更新。下面是我对管理的初始化。

  • 这对我来说很神秘。我知道函数被正确调用是因为 > 我可以在云功能日志“Received query Roud and Cleary:”中看到我的打印内容。 当删除行并返回一些虚拟数据时,函数将正确执行。

  • 我有一个关于在数据库中存储数据的问题。 我正在应用程序中的一些屏幕上工作:登录屏幕(用户可以访问你的帐户),注册屏幕(用户可以创建一个新帐户),用户提供信息的屏幕(比如“母亲的名字和身高”),以及配置文件屏幕(显示用户提供的信息)。 我在登录屏幕和注册屏幕中没有问题,但是我不知道如何在Firebase数据库中保存用户提供的信息,在用户提供信息的屏幕中。 你们谁能帮我一下吗?我知道我可以使用fire