【问题标题】:Write json file to Firebase with Node.js?使用 Node.js 将 json 文件写入 Firebase?
【发布时间】:2017-11-28 04:59:41
【问题描述】:

我有一个第三方 API,我需要每 5 秒调用一次。我得到 JSON 作为响应,我想使用 Node.js 将 JSON 内容写入 Firebase 节点。基于 Firebase 示例,我可以使用以下代码导入数据:

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

Curl 示例也有效。但我真正想做的是使用 API 端点将第三方 API 响应直接导入我的 Firebase 数据库。我如何使用 Node.js 做到这一点?

【问题讨论】:

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


    【解决方案1】:

    首先,您需要向 api 端点发出请求并接收数据。 然后,您可以将该 json 数据发送到 firebase

    var request = require('request');
    
    var usersRef = ref.child("users");
    
    request('<your_endpoint>', function (error, response, body) {
      if (!error && response.statusCode == 200) {
        var asJson = JSON.parse(body)
        usersRef.set(asJson)
       }
    })
    

    【讨论】:

      【解决方案2】:

      我在实现 Firebase 文档中的示例 node.js 代码时遇到了很多小“陷阱”。下面是一个完整工作的代码集,纠正了将作为 Google Cloud Platform 函数运行的所有问题(node.js v8 - async/await 在 v6 中不起作用):

      const admin = require('firebase-admin');
      // You need this library in order to use firebase in functions
      const functions = require('firebase-functions');
      
      /**
       * Responds to any HTTP request.
       *
       * @param {!express:Request} req HTTP request context.
       * @param {!express:Response} res HTTP response context.
       */
      exports.uploadFile = async (req, res) => {
      
        // Check if firebase is already initialized, per: https://maxrohde.com/2016/09/21/test-if-firebase-is-initialized-on-node-js-lambda/
        if (admin.apps.length === 0) {
          admin.initializeApp(functions.config().firebase);
        }
      
        var db = admin.firestore();
        var message = '';
      
        createUsers(db);
        message = await getUsers(db);
      
        res.status(200).send('Database content:\n' + message);
      };
      
      // Write data in a function so you can wait for all the Promises to complete and return per: https://github.com/firebase/functions-samples/issues/78
      function createUsers(db) {
        var docRef = db.collection('users').doc('alovelace');
      
        var setAda = docRef.set({
          first: 'Ada',
          last: 'Lovelace',
          born: 1815
        })
        .catch((err) => {
          console.log('Error writing document', err);
        });
      
        var aTuringRef = db.collection('users').doc('aturing');
      
        var setAlan = aTuringRef.set({
          'first': 'Alan',
          'middle': 'Mathison',
          'last': 'Turing',
          'born': 1912
        })
        .catch((err) => {
          console.log('Error writing document', err);
        });
      
        return Promise.all([setAda, setAlan]);
      }
      
      async function getUsers(db) {
        var message = '';
        await db.collection('users').get()
          .then((snapshot) => {
            snapshot.forEach((doc) => {
              // You need to stringify doc.data() if you want to render it outside of a console.log()
              message += '\n' + doc.id + '=>' + JSON.stringify(doc.data());
            });
          })
          .catch((err) => {
            console.log('Error getting documents', err);
          });
      
          return message;
      }
      

      【讨论】:

        猜你喜欢
        • 2023-03-15
        • 2017-12-16
        • 1970-01-01
        • 2018-07-04
        • 1970-01-01
        • 1970-01-01
        • 2014-03-25
        • 2016-01-29
        相关资源
        最近更新 更多