Node.js 无法将我的猫鼬模型添加到数据库
我有一个mongoose模型,我想将我的请求主体数据传递给它,然后使用create函数将其添加到我的数据库中,但它不工作,也不会给我任何错误,它只是存储请求 这是我的模型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:
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,这很奇怪,但是谢谢你的帮助,它与你的代码配合得很好