【问题标题】:Why this Firebase database trigger not working为什么这个 Firebase 数据库触发器不起作用
【发布时间】:2017-09-20 03:41:43
【问题描述】:

我打算编写一个 Firebase 数据库触发器。我的用例非常简单。每当 Facebook messenger webhook 调用 database 更新用户短信并使用 Firebase 数据库触发器从 AI 获取消息并返回给 messenger。

现在我的 Firebase 数据库触发器无法正常工作。即使我的测试用例都通过了。

myapp
|_ messages
   |__ 432423423423
     |__ 32432432432423
        |__ owrijrw8hy2487hf34
          |_ recipient: "45354353"
          |_ sender: "422342342"
          |_ text: "this is text"

现在我想使用 firebase 数据库触发器向用户发送消息。

// Realtime Database triggers
exports.facebookMessage = functions.database.ref('/messages/{pageID}/{userID}')
  .onCreate(event => {
    console.log(event)
    return;
  })

/test.js

describe('Database /messages/{pageID}/{userID}', () => {
    it('Should trigger when the message write it t', () => {

      pushParam = {
        text:  'Hello',
        sender: 'USER_ID',
        recipient: 'PAGE_ID',
        timestamp: 1458692752478
      }

      // Firebase database fake event
      const fakeEvent = {
        // DeltaSnapshot(app: firebase.app.App, adminApp: firebase.app.App, data: any, delta: any, path?: string);
        data: new functions.database.DeltaSnapshot(null, null, null, pushParam),
        params: {
          pageID: 'PAGE_ID',
          userID: 'USER_ID'
        }
      }

      // Stub data reference
      refParam = '/messages/'
      childPageParam = 'PAGE_ID'
      childUserParam = 'USER_ID'

      // Stubs are objects that fake and/or record function calls.
      // These are excellent for verifying that functions have been called and to validate the
      // parameters passed to those functions.
      const refStub = sinon.stub()
      const childPageStub = sinon.stub()
      const childUserStub = sinon.stub()
      const pushStub = sinon.stub()

      Object.defineProperty(fakeEvent.data, 'ref', {get: refStub})
      refStub.returns({parent: {child: childPageStub}})
      childPageStub.returns({parent: {child: childUserStub}})
      childUserStub.returns({push: pushStub})
      pushStub.withArgs(pushParam).returns(true)

      return assert.eventually.equal(fiobotFunctions.facebookMessage(fakeEvent), undefined);

在控制台中我没有看到来自 facebookMes​​sage 的任何日志我现在该怎么办?

【问题讨论】:

  • 对我来说看起来像是相当复杂的 JavaScript。尊敬的,您可能想从基础开始。
  • 我正在学习 Ron,尽管这是我完全使用 firebase 并且完全不使用 python 的第一个项目。 :)
  • 坚持下去,罗!你可以做到。

标签: javascript firebase firebase-realtime-database


【解决方案1】:

这个代码对我来说看起来是正确的,除了缺少';'在console.log()之后

// Realtime Database triggers
exports.facebookMessage = functions.database.ref('/messages/{pageID}/{userID}')
  .onCreate(event => {
    console.log(event)
    return;
  })

但是,你说

在控制台中,我没有看到来自 facebookMes​​sage 的任何日志,我该怎么办 现在?

您的功能有问题。你应该在日志中有一些东西。为了确定,我还会在您的 facebookMes​​sage 函数中添加一个console.log("Test");。如果您在日志中看不到任何内容,则说明您的函数未正确上传,或者您没有在正确的位置收听。

您可以在没有所有 Javascript 的情况下测试该功能。如果没有出现测试日志,只需手动向/messages/{pageID}/{userID} 下的数据库写入一些内容,我会检查以确保所有内容都正确上传。

【讨论】:

  • 这是一个东西';' :) 谢谢你的帮助。我用手动更新进行了测试,它有效,但我认为 9i2 指出了正确的问题。现在正在尝试解决。
【解决方案2】:

您的参考资料中似乎缺少关键..

myapp
|_ messages // /messages
   |__ 432423423423 // {pageID}
     |__ 32432432432423 // ??
        |__ owrijrw8hy2487hf34 // {userID}
          |_ recipient: "45354353"
          |_ sender: "422342342"
          |_ text: "this is text"

【讨论】:

  • Nooo 32432432432423 是用户ID,我不知道这件事owrijrw8hy2487hf34 看起来好像是firebase 数据库生成的密钥啊?
【解决方案3】:

原来我需要添加另一个参数才能获得正确的值。

exports.facebookMessage = functions.database
  .ref('/messages/{pageID}/{userID}/{messageKey}')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    • 2015-12-27
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多