You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mongoose用户Schema问题:userid缺失与重复创建

问题1:自定义userid属性无法存入MongoDB且控制器无法获取

原因分析

  • 前端请求未传递userid参数,或参数名拼写与Schema定义不一致(比如写成userId而非全小写的userid)
  • Schema中userid未设置必填或默认值,当请求无该参数时,MongoDB不会自动生成并存储此字段
  • 可通过打印req.body确认参数是否成功传递到后端

解决方案

  1. 校验前端请求参数:确保注册接口的请求body中包含userid字段,且字段名与Schema完全一致
  2. 完善Schema定义:如果userid是必填字段,添加required: true约束;若允许为空但需默认值,可设置default:
userid: {
  type: Number,
  required: true, // 必填约束
  // default: 0 // 可选:设置默认值
}
  1. 后端日志排查:在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方法被多次触发

解决方案

  1. 前端添加防抖处理:对注册按钮点击事件添加防抖,避免短时间内重复发送请求
  2. 校验后端路由配置:确保注册接口仅被定义一次,避免重复挂载路由
  3. 添加数据库唯一约束:在Schema中给用户唯一标识字段(如phoneNumber)添加unique: true约束,防止重复插入:
phoneNumber: {
  type: String,
  unique: true,
  required: true
}
  1. 后端日志排查:在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 03:10:31