【问题标题】:Update realtime database in Firebase在 Firebase 中更新实时数据库
【发布时间】:2017-10-24 18:52:31
【问题描述】:

我正在创建一个可以从实时数据库 (Firebase) 更新值的 API。使用 ClaudiaJS 创建 API。基本上,API 会按年更新一个班级的学生人数。

我做了什么:

实时数据库 (Firebase)

class
 |__2015
 |    |__numberOfStudent: 50
 |__2016
      |__numberOfStudent: 60 

像这样导出到 JSON:

{
  "class": {
    "2015": {
      "numberOfStudent": 50
    },
    "2016": {
      "numberOfStudent": 60
    }
  }
}

Javascript 文件 (ClaudiaJS):

var ApiBuilder = require('claudia-api-builder');
api = new ApiBuilder();
module.exports = api;

var admin = require("firebase-admin");

var serviceAccount = require("./xxxxxxx-firebase-adminsdk-nxxxxx.json");

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://xxxxxx.firebaseio.com"
});

api.post('/addmore/{year}/{number}', function (request) {
    var database = admin.database().ref('class');

    //Params
    var year = request.pathParams.year;
    var number = request.pathParams.number;

    var ref = year + '/numberOfStudent'; // '2015/numberOfStudent'

    database.update({
        ref : parseInt(number) // "2015/numberOfStudent" : 60
    });

    return 'Update successfully';

});

当我在 Postman 中运行 api 时:

http://xxxxapi.com/addmore/2015/55

发生了什么:API 回复“更新成功”,但数据库没有得到任何更新。看来代码 database.update() 根本不起作用。

非常感谢任何建议

【问题讨论】:

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


    【解决方案1】:

    update 调用异步发生,因此目前return 发生在update 完成之前。

    update 返回一个Promise,因此请尝试以下操作:

    return database.update({ref : parseInt(number)})
        .then(() => {
            // Each then() should return a value or throw
            return 'Update successful';
        })
        .catch(error => {
            // handle the error however you like
            console.error(error);
        });
    

    【讨论】:

    • 嗨@Jeff,它有效。感谢您快速正确的回答。 ^_^
    • 谢谢。我收到此错误:Each then() should return a value or throw!无法解决此问题。
    • @ShajeelAfzal 在我的示例中,then 返回字符串 'Update successful'。如果没有看到您的代码,很难弄清楚发生了什么。您能否提出一个新问题或将您的代码粘贴到gist 并在此处链接?
    • 谢谢!是的,这是 return 语句的问题。我只是添加了它,没有返回任何东西,问题就解决了。我建议您应该在回答中提及,以便像我这样的新手也可以利用。
    • 感谢您的反馈@ShajeelAfzal!更新了答案。
    猜你喜欢
    • 1970-01-01
    • 2022-07-08
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 2021-10-04
    • 2021-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多