Mongoose用户Schema问题:userid缺失与重复创建
问题1:自定义userid属性无法存入MongoDB且控制器无法获取
原因分析
- 前端请求未传递
userid参数,或参数名拼写与Schema定义不一致(比如写成userId而非全小写的userid) - Schema中
userid未设置必填或默认值,当请求无该参数时,MongoDB不会自动生成并存储此字段 - 可通过打印
req.body确认参数是否成功传递到后端
解决方案
- 校验前端请求参数:确保注册接口的请求body中包含
userid字段,且字段名与Schema完全一致 - 完善Schema定义:如果
userid是必填字段,添加required: true约束;若允许为空但需默认值,可设置default:
userid: { type: Number, required: true, // 必填约束 // default: 0 // 可选:设置默认值 }
- 后端日志排查:在
save_user_details方法中打印req.body,确认userid是否存在:
static save_user_details = async (req) => { try { console.log("req body包含userid?", req.body.userid); // 新增日志 const { profileImage } = req.body let set_data = req.body if (!!profileImage) { set_data.profileImage = profileImage } return await models.users.create(set_data) } catch (error) { throw error } }
问题2:用户注册时重复创建3条数据
原因分析
- 前端重复触发注册请求(比如按钮未防抖,用户多次点击;或请求未正确处理回调导致重复发送)
- 后端注册路由被重复定义(比如
app.post('/register')被多次调用) - 控制器的
create_user方法被多次触发
解决方案
- 前端添加防抖处理:对注册按钮点击事件添加防抖,避免短时间内重复发送请求
- 校验后端路由配置:确保注册接口仅被定义一次,避免重复挂载路由
- 添加数据库唯一约束:在Schema中给用户唯一标识字段(如
phoneNumber)添加unique: true约束,防止重复插入:
phoneNumber: { type: String, unique: true, required: true }
- 后端日志排查:在
create_user方法中添加日志,确认是否被多次调用:
static create_user = async (req, res) =>{ try { console.log("注册请求触发时间:", new Date()); // 新增日志 console.log("controller response",req.body) let response = await this.save_user_details(req) let message = 'Success'; res.send({ success: true, // 修正原代码拼写错误:sucess → success message: message, data: response }) } catch (error) { let status_code = error.status_code != undefined ? error.status_code: 500; let type = error.type != undefined ? error.type: 'Bad Request'; let message = error.custom_msg != undefined ? error.custom_msg: "Something went wrong" res.status(status_code).send({ success: false, // 修正拼写错误 error:type, message: message }) } }
内容的提问来源于stack exchange,提问作者user19565806
相关产品推荐
相关产品推荐

