Node.js 无法将我的猫鼬模型添加到数据库

Node.js 无法将我的猫鼬模型添加到数据库,node.js,express,mongoose,Node.js,Express,Mongoose,我有一个mongoose模型,我想将我的请求主体数据传递给它,然后使用create函数将其添加到我的数据库中,但它不工作,也不会给我任何错误,它只是存储请求 这是我的模型 const usersSchema = new mongoose.Schema({ firstname: { type: String, required: [true, "first name is required"], trim: true, minlength:

我有一个mongoose模型,我想将我的请求主体数据传递给它,然后使用create函数将其添加到我的数据库中,但它不工作,也不会给我任何错误,它只是存储请求 这是我的模型

const usersSchema = new mongoose.Schema({
  firstname: {
    type: String,
    required: [true, "first name is required"],
    trim: true,
    minlength: {
      value: 2,
      message: "your first name could not be less than 2 characters!",
    },
    maxlength: {
      values: 25,
      message: "your first name could not be more than 25 characters!",
    },
  },
  lastname: {
    type: String,
    required: [true, "last name is required"],
    trim: true,
    minlength: {
      values: 2,
      message: "your last name could not be less than 2 characters!",
    },
    maxlength: {
      values: 35,
      message: "your last name could not be more than 35 characters!",
    },
  },
  username: {
    type: String,
    unique: [true, "username has already been used!"],
    required: [true, "username is required!"],
    lowercase: true,
    trim: true,
    minlength: {
      values: 6,
      message: "your username must be at least 6 characters",
    },
    maxlength: {
      values: 35,
      message: "your user name could not be bigger than 35 characters",
    },
  },
  userType: {
    type: String,
    required: [true, "usertype is required"],
    trim: true,
    lowercase: true,
    enum: {
      values: ["user", "admin"],
      message: "each user can only be admin or user",
    },
  },
  password: {
    type: String,
    required: [true, "please enter a password for your account"],
    select: false,
    minlength: [8, "your password could not be less than 8 characters"],
    maxlength: [64, "your password could not be more than 64 characters"],
  },
  confirmPassword: {
    type: String,
    required: [true, "please confirm your password"],
    validate: {
      validator: function (val) {
        return this.password === val;
      },
      message: "your passwords are not same",
    },
  },
  email: {
    type: String,
    lowercase: true,
    trim: true,
    unique: [true, "this email has already been used!"],
  },
  phoneNumber: {
    type: String,
    unique: [true, "this phone number has already been used!"],
    minlength: [11, "phone numbers has the length of 11 characters!"],
    maxlength: [11, "phone numbers has the length of 11 characters!"],
  },
  gender: {
    type: String,
    required: [true, "gender field could not be empty!"],
    enum: {
      values: ["male,female"],
      message: "you must be either male or female!",
    },
  },
  birthDate: {
    type: Date,
  },
  confirmedEmail: {
    type: Boolean,
    required: [true, "email confirmation must be specified as true or false"],
  },
  confirmedPhone: {
    type: Boolean,
    required: [
      true,
      "phone number confirmation must be specified as true or false",
    ],
  },
  userTickets: [
    {
      matchId: {
        type: String,
        required: [true, "matchId could not be empty!"],
      },
      ticketId: {
        type: String,
        required: [true, "matchId could not be empty!"],
      },
    },
  ],
});
const userModel = mongoose.model("users", usersSchema);

module.exports = userModel;
 
这是我的控制器

exports.insertUser = async (req, res) => {
  await userModel.create(req.body);
  res.status(201).json({
    status: "success",
    message: "documents added to DB successfully",
  });
};

我更改了我的模型,它可以工作,但不适用于此模型更改模式如下:

{
  firstname: {
    type: String,
    required: [true, "first name is required"],
    trim: true,
    minlength: [
       2,
      "your first name could not be less than 2 characters!",
    ],
    maxlength: [
      25,
      "your first name could not be more than 25 characters!"
    ]
  },
  lastname: {
    type: String,
    required: [true, "last name is required"],
    trim: true,
    minlength: [
      2,
     "your last name could not be less than 2 characters!",
   ],
   maxlength: [
     25,
     "your last name could not be more than 25 characters!"
   ]
  },
  username: {
    type: String,
    unique: [true, "username has already been used!"],
    required: [true, "username is required!"],
    lowercase: true,
    trim: true,
    minlength: [
      2,
     "your user name could not be less than 2 characters!",
   ],
   maxlength: [
     35,
     "your user name could not be more than 25 characters!"
   ]
  },
  userType: {
    type: String,
    required: [true, "usertype is required"],
    trim: true,
    lowercase: true,
    enum: {
      values: ["user", "admin"],
      message: "each user can only be admin or user",
    },
  },
  password: {
    type: String,
    required: [true, "please enter a password for your account"],
    select: false,
    minlength: [8, "your password could not be less than 8 characters"],
    maxlength: [64, "your password could not be more than 64 characters"],
  },
  confirmPassword: {
    type: String,
    required: [true, "please confirm your password"],
    validate: {
      validator: function (val) {
        return this.password === val;
      },
      message: "your passwords are not same",
    },
  },
  email: {
    type: String,
    lowercase: true,
    trim: true,
    unique: [true, "this email has already been used!"],
  },
  phoneNumber: {
    type: String,
    unique: [true, "this phone number has already been used!"],
    minlength: [11, "phone numbers has the length of 11 characters!"],
    maxlength: [11, "phone numbers has the length of 11 characters!"],
  },
  gender: {
    type: String,
    required: [true, "gender field could not be empty!"],
    enum: {
      values: ["male", "female"],
      message: "you must be either male or female!",
    },
  },
  birthDate: {
    type: Date,
  },
  confirmedEmail: {
    type: Boolean,
    required: [true, "email confirmation must be specified as true or false"],
  },
  confirmedPhone: {
    type: Boolean,
    required: [
      true,
      "phone number confirmation must be specified as true or false",
    ],
  },
  userTickets: [
    {
      matchId: {
        type: String,
        required: [true, "matchId could not be empty!"],
      },
      ticketId: {
        type: String,
        required: [true, "matchId could not be empty!"],
      },
    },
  ],
}
exports.insertUser = async (req, res) => {
  try {
    let newUser = new userModel(req.body)
    await newUser.save();
    res.status(201).json({
      status: "success",
      message: "documents added to DB successfully",
    });
  } catch (error) {
    console.log(error);
    res.status(500).json({
      status: "faild",
      message: "something went wrong",
    });
  }
};
因为在使用
minlength
maxlength
时,使用了以下格式:

    minlength: [
       2,
      "your first name could not be less than 2 characters!",
    ]
使用
值:[“男”、“女”]
表示性别,而不是
值:[“男、女”]
,因为您缺少

在正文请求的样本中

 {
    "lastname": "name",
    "firstname": "family",
    "username": "asf3",
    "userType": "admin",
    "password": "123456789",
    "confirmPassword": "123456789",
    "email": "ssssss@ghaderi.com",
    "phoneNumber": "12123456789",
    "gender": "female",
    "birthDate": "2002-06-05",
    "confirmedEmail": true,
    "confirmedPhone": true,
    "userTickets": []
  }
在req.body的示例中,您使用大写的
firstName
lastName
,但在模式中是
firstName
lastName

像这样使用try/catch:

{
  firstname: {
    type: String,
    required: [true, "first name is required"],
    trim: true,
    minlength: [
       2,
      "your first name could not be less than 2 characters!",
    ],
    maxlength: [
      25,
      "your first name could not be more than 25 characters!"
    ]
  },
  lastname: {
    type: String,
    required: [true, "last name is required"],
    trim: true,
    minlength: [
      2,
     "your last name could not be less than 2 characters!",
   ],
   maxlength: [
     25,
     "your last name could not be more than 25 characters!"
   ]
  },
  username: {
    type: String,
    unique: [true, "username has already been used!"],
    required: [true, "username is required!"],
    lowercase: true,
    trim: true,
    minlength: [
      2,
     "your user name could not be less than 2 characters!",
   ],
   maxlength: [
     35,
     "your user name could not be more than 25 characters!"
   ]
  },
  userType: {
    type: String,
    required: [true, "usertype is required"],
    trim: true,
    lowercase: true,
    enum: {
      values: ["user", "admin"],
      message: "each user can only be admin or user",
    },
  },
  password: {
    type: String,
    required: [true, "please enter a password for your account"],
    select: false,
    minlength: [8, "your password could not be less than 8 characters"],
    maxlength: [64, "your password could not be more than 64 characters"],
  },
  confirmPassword: {
    type: String,
    required: [true, "please confirm your password"],
    validate: {
      validator: function (val) {
        return this.password === val;
      },
      message: "your passwords are not same",
    },
  },
  email: {
    type: String,
    lowercase: true,
    trim: true,
    unique: [true, "this email has already been used!"],
  },
  phoneNumber: {
    type: String,
    unique: [true, "this phone number has already been used!"],
    minlength: [11, "phone numbers has the length of 11 characters!"],
    maxlength: [11, "phone numbers has the length of 11 characters!"],
  },
  gender: {
    type: String,
    required: [true, "gender field could not be empty!"],
    enum: {
      values: ["male", "female"],
      message: "you must be either male or female!",
    },
  },
  birthDate: {
    type: Date,
  },
  confirmedEmail: {
    type: Boolean,
    required: [true, "email confirmation must be specified as true or false"],
  },
  confirmedPhone: {
    type: Boolean,
    required: [
      true,
      "phone number confirmation must be specified as true or false",
    ],
  },
  userTickets: [
    {
      matchId: {
        type: String,
        required: [true, "matchId could not be empty!"],
      },
      ticketId: {
        type: String,
        required: [true, "matchId could not be empty!"],
      },
    },
  ],
}
exports.insertUser = async (req, res) => {
  try {
    let newUser = new userModel(req.body)
    await newUser.save();
    res.status(201).json({
      status: "success",
      message: "documents added to DB successfully",
    });
  } catch (error) {
    console.log(error);
    res.status(500).json({
      status: "faild",
      message: "something went wrong",
    });
  }
};

在console.log(error)之后将create函数放入try catch中,并显示错误它不会抛出任何错误,这是我的问题在inseuser函数console.log(req.body)的第一部分,向我显示结果,而不是create,使用save()我以前尝试过,但没有任何错误:(,这会让我大吃一惊{firstName:'asfe3w',lastName:'afsfe',username:'asf3',userType:'admin',password:'sffas',confirmPassword:'asdasdas',email:'ssssss@ghaderi.com,电话号码:“412421241”,性别:“女性”,出生日期:“2002-06-05”,确认邮箱:true,确认电话:true,用户票证:[]]我复制了你的模型,但它又不起作用了。我的代码在model.create之前到达了行,它存储在model.create上。复制req.body同样,我对它进行了测试,检查了其他的事情,因为我解决了schema和req.body的问题。我复制了你的控制器,现在它工作了,我将你的控制器代码更改为model.create,它工作了再一次,但当我注释掉你的控制器并使用我自己的控制器时,它再次储存:D,这很奇怪,但是谢谢你的帮助,它与你的代码配合得很好