MongoDB Trigger Function运行报错:无法访问undefined的id成员
错误原因
你收到的报错是因为执行代码时authEvent对象内没有user属性,导致解构得到的user为undefined,访问其id属性就触发了类型错误,常见触发场景如下:
- 触发器类型配置错误:该代码适配认证触发器(Authentication Trigger),如果你创建触发器时选错为数据库触发器、定时触发器等其他类型,触发时传入的事件对象不会携带
user字段 - 手动测试未传入正确参数:如果你直接在Atlas函数编辑器中点击测试运行,没有手动构造包含
user字段的authEvent入参,也会触发该报错
修复方案
第一步:修正触发器配置
确认你创建的触发器类型为「Authentication Trigger」,触发事件选择「Created」,匹配用户首次完成身份认证的触发场景。
第二步:优化代码健壮性
你可以在代码中增加参数校验逻辑,避免空值报错,同时调整更新查询条件避免同一用户重复生成文档,优化后代码如下:
exports = function(authEvent){ const mongodb = context.services.get("mongodb-atlas"); const users = mongodb.db('data').collection('User'); // 增加空值判断避免报错 if (!authEvent || !authEvent.user || !authEvent.user.id) { return null; } const { user } = authEvent; const newObjcId = new BSON.ObjectId(); const newUser = { _id: newObjcId, realm_id: user.id }; // 查询条件改为用户realm_id,避免同一用户重复插入文档 return users.updateOne({realm_id: user.id}, newUser, {upsert: true}); };
第三步:本地测试参数配置
如果需要在函数编辑器内测试运行,需要在测试入参中填入模拟的认证事件结构:
{ "user": { "id": "替换为你测试用的用户realm_id" } }
提示:如果配置为认证触发器后正式触发仍存在该问题,可以在代码开头加
console.log(JSON.stringify(authEvent))打印完整的事件对象结构,确认实际传入的字段是否符合预期。
内容的提问来源于stack exchange,提问作者bn 41
相关产品推荐
相关产品推荐

