angular - Firebase 可调用函数检查数据参数的类型
问题描述
我有一个可以更新数据库中用户的 firebase 可调用函数。
我想检查从前端收到的对象数据的类型。
这是对象:
{ "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', ...] => (预期['displayName', 'email', 'phoneNumber', ...] )
我已经看到我可以将所有属性放在 const 变量中,如下所示:
const displayName = data.user.displayName
const email = data.user.email
...
但这不是一个真正干净的解决方案
解决方案
这是目前我在使用 Firebase Cloud Functions 时遇到的一个错误,来自的数据onCall
正在返回一个嵌套的数据对象
data: {data: payload}
当前的解决方法是重新声明数据,如下所示:
incomingData = data.data? data.data: data;
与此同时,它应该很快就会修复 - 您可以自己跟踪它:
if (data.data) console.error("data.data is still a thing")
推荐阅读
- c# - 使用 EnumeratorCancellation 返回 AsyncEnumerable 或循环使用 WithCancellation 有什么区别
- sql-server - 在查询中主要插入时查询完成并出现错误
- python - GLTF 中的平移和缩放
- laravel - 在从 docker-compose.yml 完成 docker build 后触发在容器内执行自定义 shell 脚本以运行迁移和 db:seed
- php - 按标签或类别搜索产品不起作用
- c# - 在 C# 中清除静态列表
- r - 错误:替换有 x 行,数据有 y
- qt - QML 我如何将默认选项设置为组合框的空值?
- abap - 删除一列包含字符“+”的内部表格行
- angular - 无法通过 2 个级别传递 ngModel