首页 > 解决方案 > 如何从 Firebase 数据库中检索单个 JSON 值?

问题描述

假设我有一个 dbref = firebase.ref('/Transfer_Request/{pushID]/') 的 firebase 节点。

客户端写入两个值;from_ID 和 to_ID 到 dbref。如何从 Firebase Cloud 函数中获取 from_ID 和 to_ID 的各个值?

我的数据库

我的代码:

exports.TransferTicket = functions.database.ref('/Transfer_Request/{pushID}').onWrite((event) => {

  const original = event.data.val();
  const from_ID = original.from_ID;
  const to_email_ID = original.to_ID;

  //search for to_email ID
  return admin.database().set("A transfer request was just made");

});

我收到两个错误:

1)

TypeError: admin.database(...).set 不是 export 的函数。TransferTicket.functions.database.ref.onWrite (/user_code/index.js:41:25) 的 Object。(/user_code/node_modules/firebase-functions/lib/cloud-functions.js:59:27) 在下一个 (native) 在 /user_code/node_modules/firebase-functions/lib/cloud-functions.js:28:71 在 __awaiter (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:24:12) 在 cloudFunction (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:53:36) 在 /var/ tmp/worker/worker.js:716:24 at process._tickDomainCallback (internal/process/next_tick.js:135:7)

2)

类型错误:无法在 exports.TransferTicket.functions.database.ref.onWrite (/user_code/index.js:35:25) 在 Object 处读取 null 的属性“来自”。(/user_code/node_modules/firebase-functions/lib/cloud-functions.js:59:27) 在下一个 (native) 在 /user_code/node_modules/firebase-functions/lib/cloud-functions.js:28:71 在 __awaiter (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:24:12) 在 cloudFunction (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:53:36) 在 /var/ tmp/worker/worker.js:716:24 at process._tickDomainCallback (internal/process/next_tick.js:135:7)

标签: javascriptnode.jsfirebasefirebase-realtime-databasegoogle-cloud-functions

解决方案


第一个问题来自这样一个事实,即在执行以下操作时您会错过 Firebase Reference

return admin.database().set("A transfer request was just made");

你应该做:

admin.database().ref('...the path where you want to write...').set("A transfer request was just made");

有关更多详细信息,请参阅参考数据库的文档。

第二个问题是自从 Firebase SDK for Cloud Functions 1.0.0 版的新版本发布以来,语法发生了变化。请参阅此文档

你应该修改你的代码如下:

exports.TransferTicket = functions.database.ref('/Transfer_Request/{pushID}').onWrite((change, context) => {

    const original = change.after.val();

    const from_ID = original.from_ID;
    console.log(from_ID);
    const to_email_ID = original.to_ID;
    console.log(to_email_ID);

    return admin.database().ref('...path...').set("A transfer request was just made")
    .catch(error => {
        console.log(error);
        //...
    });

});

推荐阅读