首页 > 解决方案 > 使用 Javascript 和 Nodejs 从 JSON 文件向 Firebase 推送/设置数据

问题描述

我想将数据上传到 Firebase 的实时数据库。此信息与用户 ID 相关。我已经在 J​​SON 文件中下载了这些相关的用户信息。我可以使用 JavaScript 轻松地将这些信息读入 Node.js 命令提示符。

我也知道如何使用 JavaScript 推送和设置数据。

我的问题似乎是在相同的 JavaScript 代码中包括从文件操作读取和写入到 firebase 操作。

为了测试这一点,我编写了一个非常基本的 JavaScript 程序,该程序使用回调函数,因此我可以确保它在开始写入之前完成从文件中读取,但即使编写注释掉的代码也会使整个 JavaScript 程序无法工作。(我知道我不需要前两行,但我尝试了不同的东西,我想同时展示它们)

function GetAllData(callback) {

//var userData = require('./save_file.json');
// var fs = require('fs')
//   var obj = JSON.parse(fs.readFileSync('save_file.json').toString())
    var a=2;

if (typeof callback === 'function') {
    callback();
}
}

function PushData() {
var config = {
    apiKey: ,
    authDomain: ,
    databaseURL: ,
    projectId: ,
    storageBucket: ,
    messagingSenderId: 
  };
// Initialize your Firebase app
firebase.initializeApp(config);

// Reference to your entire Firebase database
var myFirebase = firebase.database().ref();
var recommendations = myFirebase.child("recommendations");

setTimeout(pushStuff(), 500);

function pushStuff(){

    recommendations.set({
        "title": "nn"
    });
}
};
 //}

 GetAllData(PushData);

如果我删除第一部分中注释掉的代码,“nn”就写得很好。在这一点上,我只想能够在相同的代码中读取和写入:(

标签: javascriptjsonnode.jsfirebasefirebase-realtime-database

解决方案


正如您在问题中提到的,对 Firebase 数据库的读取和写入调用是异步的。

正如您在此处此处看到的,它们从 Firebase 文档返回承诺。

因此,您必须链接这些承诺,例如,在read后跟write的情况下:

return firebase.database().ref('/users/' + userId).once('value')
.then(snapshot => {
    var username = (snapshot.val() && snapshot.val().username) || 'Anonymous';
    return firebase.database().ref(....).set({ username: username });
})
.then(() => {
    console.log('Operation succeeded');
})
.catch(error => {
    console.log('Operation failed');
});

另外,看看这篇SO帖子Reading a nodejs promise with firebase


推荐阅读