Сохранение Firebase в базе данных из API облачной функции - PullRequest
0 голосов
/ 07 мая 2018

Я написал облачную функцию Firebase, к которой можно получить доступ через REST API. Код приведен ниже.

Что мне нужно сделать, это когда пользователь отправляет некоторые значения из внешнего интерфейса через «URL-адрес веб-службы».

1.) Мне нужно, чтобы эти данные были сохранены в базе данных Firebase-realtime.

2.) Я ссылался на несколько учебных пособий в сети и не понял, что var ref = db.ref("server/saving-data/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
    });
      });

});

enter image description here

1 Ответ

0 голосов
/ 07 мая 2018

Ваш код записывает данные в базу данных под узлом 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("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. Что и отражено выше при экспорте базы данных.

Обратите внимание, что с вашим текущим кодом вы всегда будете записывать одни и те же данные в местоположении, то есть следующий объект:

{
  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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...