为什么此Firebase数据库无法启动

时间:2017-09-19 18:56:48

标签: javascript firebase firebase-realtime-database

我打算编写一个Firebase数据库触发器。我的用例很简单。每当Facebook messenger webhook调用数据库时,都会使用用户文本消息进行更新,并使用Firebase数据库触发器从AI获取消息并返回信使。

现在我的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的日志我现在该怎么办?

3 个答案:

答案 0 :(得分:0)

这段代码对我来说是正确的,除了缺少的&#39 ;;'在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}下手动向数据库写一些内容我会检查以确保所有内容都正确上传。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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