我创建了一个在onCreate事件上侦听的firebase函数,但是DocumentSnapshot.data()返回空。
功能代码为:
exports.createClientAccount = functions.firestore
.document('/userProfile/{userId}/clientList/{clientId}')
.onCreate(async (snap, context) => {
console.log('****snap.data(): ', snap.data()); //Showing Empty from the console.
return admin
.auth()
.createUser({
uid: context.params.clientId,
email: snap.data().email,
password: '123456789',
displayName: snap.data().fullName,
})
.then(userRecord => {
return admin
.database()
.ref(`/userProfile/${userRecord.uid}`)
.set({
fullName: userRecord.displayName, //ERROR here: Reference.set failed: First argument contains undefined
email: userRecord.email,
coachId: context.params.userId,
admin: false,
startingWeight: snap.data().startingWeight,
});
})
.catch(error => {
console.error('****Error creating new user',error);
});
});
是在Firebase数据库上
下创建的文档IS/userProfile/{userId}/clientList/{clientId}
clientId document created on the database
根据文档,onCreate会在创建新文档时侦听并返回通过DocumentSnapshot接口创建的数据的快照。但是,我已经从控制台检查snap.data()为空。我不明白,如果在数据库上成功创建了文档,为什么它为空。
image showing error returned by the functions when creating the userProfile
根据功能代码,return admin.auth.createUser({})
将用户创建为匿名用户,因为未定义snap.data()。email,但应创建一个非匿名用户。
答案 0 :(得分:0)
首先,请尝试将document('/userProfile/{userId}/clientList/{clientId}')
更改为document('userProfile/{userId}/clientList/{clientId}')
。
path
不应以/
开头。
exports.createClientAccount = functions.firestore
.document('userProfile/{userId}/clientList/{clientId}')
答案 1 :(得分:0)
最后的问题是,当我使用add({})创建文档时,我没有在指令中包括这些字段。这是创建客户文档的函数,现在该函数已正确触发。
async clientCreate(
fullName: string,
email: string,
startingWeight: number
): Promise<any> {
const newClientRef = await this.firestore
.collection(`userProfile/${this.userId}/clientList/`)
.add({
fullName,
email,
startingWeight: startingWeight * 1,
});
return newClientRef.update({
id: newClientRef.id
});
}
我在没有字段的情况下调用this.firestore.collection(...).add({})
,所以当它发生时,云函数被触发并且DocumentSnapshot.data()
为空,因此返回了Reference.set
错误。云功能createClientAccount
是正确的。谢谢。