【问题标题】:Firebase Cloud Function .onWrite always logs null or undefinedFirebase Cloud Function .onWrite 始终记录 null 或 undefined
【发布时间】:2018-10-16 11:17:06
【问题描述】:

我不知道为什么除了“null”或“undefined”之外什么都不会记录到控制台。我正在通过 Google Cloud Platform 测试浏览器界面对此进行测试。我也尝试用相同的结果记录 EVENT(而不是 CHANGE 和 CONTEXT)。我也尝试过打开安全规则,但这也没有帮助。非常感谢任何建议。

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

exports.fanOutLink = functions.database.ref('/userLink/BLAH584H5BLAH30BLA/link').onWrite((change, context) => {
  console.log('value is:'+change.before.val());
});

这是我用来测试上面代码的 JSON:

{
"userLink": {
      "BLAH584H5BLAH30BLA": {
        "link": "https://blabla.com"
      }
    }
}

【问题讨论】:

  • 您确定要更改数据,而不是添加/删除数据吗? change.before 只会对更新/删除有一个值。在写入新数据时,它将是一个空快照。
  • @FrankvanPuffelen 是的,我很肯定我正在更改链接值。谷歌云平台测试界面输出为:错误:函数执行失败。详细信息:无法读取未定义的属性“val”
  • 我实际上不确定 GCP 测试接口是否使用您期望的参数调用 Firebase 的函数。希望其他人可以证实这一点。
  • 我建议您确保您的函数在使用 Firebase CLI 部署时按照您期望的方式工作,并使用您在GCP 测试接口。我不确定测试界面是否会按照您对 Firebase 事件的预期方式工作。

标签: firebase firebase-realtime-database google-cloud-platform google-cloud-functions


【解决方案1】:

云函数必须总是返回一个 Promise(或者如果你不能,至少返回一个值)。

您的函数应该按原样运行,但在日志中会出现延迟和错误,例如“函数返回未定义、预期的 Promise 或值”。在您的函数成功将消息写入日志之前,运行您的函数的 Cloud Functions 实例可能会关闭。

如果您按以下方式更改代码,您将获得(准)即时回复:

exports.fanOutLink = functions.database.ref('/userLink/BLAH584H5BLAH30BLA/link').onWrite((change, context) => {
    console.log('value is:'+change.before.val());
    return true;
});

我建议您看看 Firebase 团队的这两个视频:https://www.youtube.com/watch?v=7IkUgCLr5oA&t=511shttps://www.youtube.com/watch?v=652XeeKNHSk&t=37s


根据我们在下面 cmets 中的“讨论”,您似乎使用了新的 Cloud Functions 语法,但使用了旧版本的库。查看此文档项:https://firebase.google.com/docs/functions/beta-v1-diff,并按照指示进行操作,然后再重新部署:

在函数文件夹中运行以下命令:

npm install firebase-functions@latest --save

npm installfirebase-admin@5.11.0 --save

【讨论】:

  • 感谢您的回复。我更新了代码,但它仍然返回以下内容:“错误:函数执行失败。详细信息:无法读取未定义的属性 'val'”
  • 您使用的是哪个版本的 Cloud Functions?您可以在 package.json 文件中的“dependencies”/节点下找到它,“firebase-functions”元素
  • “firebase-admin”:“~5.4.0”和“firebase-functions”:“^0.7.0”
  • 您得到的错误是正常的:您的语法 (onWrite((change, context)) 是 Cloud Functions 1.0 以上版本之一。执行本文档项开头说明的操作:firebase.google.com/docs/functions/beta-v1-diff,即两个 npm install。我会更新我的答案
  • 非常感谢。我应该检查一下。
猜你喜欢
  • 1970-01-01
  • 2018-05-16
  • 2021-08-15
  • 2017-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-12
相关资源
最近更新 更多