【问题标题】:Firebase Realtime Database JS Error : Reference.set failedFirebase 实时数据库 JS 错误:Reference.set 失败
【发布时间】:2021-04-15 07:58:13
【问题描述】:

我的云功能出现此错误

Error: Reference.set failed: First argument contains NaN in property 'server.saving-data.fireblog.history.newid.Id'
    at validateFirebaseData (/workspace/node_modules/@firebase/database/dist/index.node.cjs.js:1497:15)
    at /workspace/node_modules/@firebase/database/dist/index.node.cjs.js:1534:13
    at each (/workspace/node_modules/@firebase/database/dist/index.node.cjs.js:554:13)
    at validateFirebaseData (/workspace/node_modules/@firebase/database/dist/index.node.cjs.js:1517:9)
    at /workspace/node_modules/@firebase/database/dist/index.node.cjs.js:1534:13
    at each (/workspace/node_modules/@firebase/database/dist/index.node.cjs.js:554:13)
    at validateFirebaseData (/workspace/node_modules/@firebase/database/dist/index.node.cjs.js:1517:9)
    at validateFirebaseDataArg (/workspace/node_modules/@firebase/database/dist/index.node.cjs.js:1475:5)
    at Reference.set (/workspace/node_modules/@firebase/database/dist/index.node.cjs.js:13928:9)
    at /workspace/index.js:44:20 

我打出来的js代码如下

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
var db = admin.database();
var ref = db.ref("server/saving-data/fireblog");


exports.addHistory = functions.database.ref('issue/{id}').onCreate(async (snapshot, context) => {
  const val = snapshot.val();
  var lastid;

  return admin.database().ref('history').orderByChild("Id").limitToLast(1).on("child_added", function (snapshot) {
      snapshot.forEach(function (data) {
          lastid = data.val().Id;
      
      });
      const timeElapsed = Date.now();
      const today = new Date(timeElapsed);
      var datetime=today.toUTCString();

      var newid = lastid + 1;
          var usersRef = ref.child("history");
          usersRef.set({
              newid: {
                  Lamp: val.Id,
                  Reported: datetime,
                  Completed:"",
                  Status:"Pending",
                  AssignedTo:"",
                  Id:newid
              }
          });
  });


});

这是我需要添加记录的地方 所以我得到当前情况下的最后一个 Id 是 2 并增加 1 使 3 并添加一个带有键 3 的新记录

规则已定

【问题讨论】:

    标签: javascript node.js firebase firebase-realtime-database google-cloud-functions


    【解决方案1】:

    由于您正在阅读history,并收听child_added,因此您的回调中的snapshot 已经被单独的子节点调用。这意味着不需要snapshot.forEach()

    我还建议在此处使用once 而不是on,因为您不想在读取一次值后保持侦听器处于活动状态。

    最后,您还需要从usersRef.set() 返回承诺,以确保云函数在写入数据库完成之前不会中止。

    所有组合,看起来像这样:

      return admin.database().ref('history').orderByChild("Id").limitToLast(1).once("child_added")
      .then(snapshot => {
          lastid = snapshot.val().Id;
    
          const timeElapsed = Date.now();
          const today = new Date(timeElapsed);
          var datetime=today.toUTCString();
    
          var newid = lastid + 1;
          var usersRef = ref.child("history");
          return usersRef.set({
              newid: {
                  Lamp: val.Id,
                  Reported: datetime,
                  Completed:"",
                  Status:"Pending",
                  AssignedTo:"",
                  Id:newid
              }
          });
      });
    

    【讨论】:

      猜你喜欢
      • 2017-05-28
      • 2020-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-19
      • 2020-02-20
      • 1970-01-01
      • 2021-02-01
      相关资源
      最近更新 更多