首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从云函数API到数据库的防火墙保存

从云函数API到数据库的防火墙保存
EN

Stack Overflow用户
提问于 2018-05-07 17:00:08
回答 1查看 2.4K关注 0票数 1

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

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

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

2.)我参考了网络上的几个教程,不明白var ref = db.ref("server/saving-data/fireblog");在下面的代码中做了什么。

代码语言:javascript
复制
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
    });
      });

});

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-07 19:25:33

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

代码语言:javascript
复制
  "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("server/saving-data/fireblog")Reference的一个实例,它“代表数据库中的特定位置,可用于将数据读写到数据库位置”,参见https://firebase.google.com/docs/reference/js/firebase.database.Reference

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

因此,通过组合初始引用和child()方法,在执行usersRef.set({})时,您将写入以下路径:server/saving-data/fireblog/users。这就是上面在数据库的导出中反映出来的。

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

代码语言:javascript
复制
{
  alanisawesome: {
    date_of_birth: "June 23, 1912",
    full_name: "Alan Turing"
  },
  gracehop: {
    date_of_birth: "December 9, 1906",
    full_name: "Grace Hopper"
  }
}

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

使用这样的云函数,您可以通过HTTPS调用,您将获得要写入HTTP请求正文中的数据库的数据。

最后一点:我会重新组织你的工作如下:

代码语言:javascript
复制
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);
            })
        }

    })

});

最后,我建议你看看下面的视频:https://www.youtube.com/watch?v=7IkUgCLr5oA

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50219139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档