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

Posted

技术标签:

【中文标题】使用 Node.js 将 json 文件写入 Firebase?【英文标题】:Write json file to Firebase with Node.js? 【发布时间】: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 做到这一点?

【问题讨论】:

【参考方案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;

【讨论】:

以上是关于使用 Node.js 将 json 文件写入 Firebase?的主要内容,如果未能解决你的问题,请参考以下文章

使用 node.js 将 JSON 写入 mysql 数据库

node.js怎么往文本文档中写入数据

如何通过 vue.config.js webpack config 将 JSON 文件写入 dist 文件夹?

如何处理 json 并写入 node.js 中的文件

在 Node.js 中解析大型 XML 文件

Node.Js 向文件写入和读取数组