[英]Write json file to Firebase with Node.js?
我有一個第三方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"
}
});
卷曲示例也起作用。 但是,我真正想做的是使用API端點將第三方API響應直接導入到Firebase數據庫中。 我該如何使用Node.js?
首先,您需要向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)
}
})
我遇到了很多小問題,它們實現了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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.