【发布时间】:2021-10-18 22:01:40
【问题描述】:
我有一个 firebase 可调用函数来更新我数据库中的用户。
我想检查我从前端收到的对象 data 的类型。
这是对象:
{ "data":
{ "user":
{
"displayName": "Flo",
"email": "flo@gmail.com",
"phoneNumber": "+33",
"photoURL": "",
"providerId": "fdgfg",
"uid": "2",
"lastSignInTime": "dddf",
"creationTime": "sdfd",
"isEmailVerified": true
}
}
}
这里是可调用函数:
exports.updateUser = functions.https.onCall((data: { user: User }, context) => {
const user = data.user
if (context.auth != null && instanceOf(user)) {
db.doc(${USERS_DB_NAME}/${context.auth?.uid}).set(JSON.parse(JSON.stringify(user)))
return new SuccessResponse<Message>({ message: SUCCESS_MESSAGE }).toResponse()
} else {
return new ErrorResponse('permission-denied', PERMISSION_DENIED_MESSAGE).toResponse()
}
})
这是应该检查类型的函数:
static instanceOf(object: any): boolean {
const properties = ['displayName', 'email', 'phoneNumber', 'photoURL', 'providerId', 'uid', 'lastSignInTime', 'creationTime', 'isEmailVerified']
return Object.keys(object).every(v => properties.includes(v))
}
问题是:
- user.displayName 返回 undefined =>(预期 “Flo” )
- Object.keys(user) 返回 ['0', '1', '2', ...] em> =>(预期 ['displayName', 'email', 'phoneNumber', ...])
我已经看到我可以像这样将我的所有属性放在 const 变量中:
const displayName = data.user.displayName
const email = data.user.email
...
但这不是一个真正干净的解决方案
【问题讨论】:
-
我认为您收到的实际对象不是您所期望的..
-
这就是 Mike 的问题,这是 Cloud Functions 中的当前错误
标签: angular typescript firebase google-cloud-functions