我是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)
我非常确定我的数据库结构正确,如下所示:
是什么导致此错误?是否未安装某些功能的“包装”?
我正在运行节点v10.9.0和npm 6.2.0。
编辑Doug:
谢谢你道格,这是一个很棒的视频!我已经编辑了数据库,现在添加消息时看起来像这样(以前的尝试是我的函数尝试替换单词):
我还通过在末尾添加TypeScript
来更改了/text
代码引用。我还使用messageData
将String()
强制转换为字符串,这消除了错误并显示了您所描述的单词“ undefined”。如您所说,我已经将消息与孩子分开了,但是我仍然感到困惑,为什么我没有收到该值以及为什么它增加了一个额外的text
孩子。谢谢!
如有任何疑问,请告诉我!
答案 0 :(得分:0)
该错误消息告诉您您向initialize
传递了未定义的值。然后,您尝试在该未定义值上调用字符串方法。
您使用的参考模式与您的数据库模式不匹配。您似乎假设每个消息在数据库中都以其自己的属性存在。这将无法按您期望的方式工作,并且几乎可以肯定不是您要使用的数据库模型。相反,您可能应该为每条消息将新的子项推入数据库,该数据库在消息的文本中拥有自己的子项。
addMore