使用Cloud Functions

时间:2018-09-11 21:47:48

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

我是Fire Functions云功能的新手,我正在尝试将它们与实时数据库一起使用。

我正在关注this documentation where it has a Youtube tutorial at the top of the page

这是我在index.ts中的代码:

import * as functions from 'firebase-functions';

export const onMessageCreate = functions.database
.ref('/party/{partyID}/messages/{message}')
.onCreate((snapshot, context) => {
    const messageData = snapshot.val()
    const text = addMore(messageData.text)
    return snapshot.ref.update({ text: text })
})

function addMore(text: string): string {
    return text.replace(/\bhello\b/g, 'hey')
}

但是,我的功能日志中出现以下错误:

TypeError: Cannot read property 'replace' of undefined

at addMore (/user_code/lib/index.js:12:16)
at exports.onMessageCreate.functions.database.ref.onCreate (/user_code/lib/index.js:8:18)
at cloudFunctionNewSignature (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:105:23)
at cloudFunction (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:135:20)
at /var/tmp/worker/worker.js:733:24
at process._tickDomainCallback (internal/process/next_tick.js:135:7)

enter image description here

我非常确定我的数据库结构正确,如下所示:

enter image description here

是什么导致此错误?是否未安装某些功能的“包装”?

我正在运行节点v10.9.0和npm 6.2.0。

编辑Doug:

谢谢你道格,这是一个很棒的视频!我已经编辑了数据库,现在添加消息时看起来像这样(以前的尝试是我的函数尝试替换单词):

enter image description here

我还通过在末尾添加TypeScript来更改了/text代码引用。我还使用messageDataString()强制转换为字符串,这消除了错误并显示了您所描述的单词“ undefined”。如您所说,我已经将消息与孩子分开了,但是我仍然感到困惑,为什么我没有收到该值以及为什么它增加了一个额外的text孩子。谢谢!


如有任何疑问,请告诉我!

1 个答案:

答案 0 :(得分:0)

该错误消息告诉您您向initialize传递了未定义的值。然后,您尝试在该未定义值上调用字符串方法。

您使用的参考模式与您的数据库模式不匹配。您似乎假设每个消息在数据库中都以其自己的属性存在。这将无法按您期望的方式工作,并且几乎可以肯定不是您要使用的数据库模型。相反,您可能应该为每条消息将新的子项推入数据库,该数据库在消息的文本中拥有自己的子项。

addMore