使用Node.js将JSON文件写入Firebase?

3

我需要调用第三方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中实现?

2个回答

5

首先,您需要向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)
   }
})

0

我在实现 Firebase 文档中的示例 node.js 代码时遇到了很多小问题。以下是一组完全可工作的代码,纠正了所有问题,并且可以作为 Google Cloud 平台函数运行(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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接