firebase云函数错误TypeError:无法读取未定义的属性“子”
Posted
技术标签:
【中文标题】firebase云函数错误TypeError:无法读取未定义的属性“子”【英文标题】:firebase cloud function error TypeError: Cannot read property 'child' of undefined 【发布时间】:2020-08-01 02:02:25 【问题描述】:我是firebase云功能的新手,我的情况是每当数据库中发布新文章时,我需要向我的应用用户显示通知。
我的代码
var functions = require('firebase-functions');
var admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.sendNotification = functions.database.ref('/article/articleId')
.onWrite((event: data: any; ) =>
var eventSnapshot = event.data;
var str1 = "Author is ";
var str = str1.concat(eventSnapshot.child("author").val());
console.log(str);
var topic = "android";
var payload =
data:
title: eventSnapshot.child("title").val(),
author: eventSnapshot.child("author").val()
;
return admin.messaging().sendToTopic(topic, payload)
.then(function (response: any)
console.log("Successfully sent message:", response);
)
.catch(function (error: any)
console.log("Error sending message:", error);
);
);
这是我在 Firebase 中的数据库结构。
来自 logcat 的完整 Stacktrace 在这里。
TypeError: Cannot read property 'child' of undefined
at exports.sendNotification.functions.database.ref.onWrite (/srv/lib/index.js:17:41)
at cloudFunction (/srv/node_modules/firebase-functions/lib/cloud-functions.js:131:23)
at /worker/worker.js:825:24
at <anonymous>
at process._tickDomainCallback (internal/process/next_tick.js:229:7)
sendNotification
Function execution took 286 ms, finished with status: 'error'
【问题讨论】:
您正在使用旧版本的 Cloud Functions API。如果您正在学习教程,那么它已经过时了。我建议使用产品文档来了解它是如何工作的。 firebase.google.com/docs/functions/database-events 【参考方案1】:请注意,onWrite()
处理程序接受具有before
和after
属性的Change 对象,但不接受data
。我想这是问题的原因,请参阅onWrite()
documentation。如果您想获取更新的数据,请使用 event.after.child('author')
而不是 event.data.child('author')
。
exports.sendNotification = functions.database.ref('/article/articleId').onWrite(change =>
// Exit when the data is deleted.
if (!change.after.exists())
return null;
const author = change.after.child('author').val();
...
);
【讨论】:
@SathishkumarG 很高兴为您提供帮助!还要注意如果文件被删除change.after
可能不存在,所以最好检查一下。我也更新了答案。以上是关于firebase云函数错误TypeError:无法读取未定义的属性“子”的主要内容,如果未能解决你的问题,请参考以下文章
TypeError:rtdb.initStandalone 不是函数
TypeError: Buffer.alloc 在访问 firebase 工具时不是函数
Firebase云功能“admin.messaging(...)。send不是函数”
Firebase TypeError:无法读取未定义的属性“val”
无法使用使用 firebase 创建的登录模块进行注册,并从客户端收到错误“TypeError: Cannot read property 'email' of null”