User.findUserByEmail 不是函数
User.findUserByEmail is not a function
我正在使用 nodejs 和 mongoose,使用 express-validator 来验证电子邮件重复,
check("email")
.custom(value => {
return User.findUserByEmail(value).then(user => {
if (user) {
return Promise.reject('E-mail already in use');
}
});
})
当使用重复的电子邮件发帖时,我收到错误提示
{
"errors": [
{
"value": "boka@gmail.com",
"msg": "User.findUserByEmail is not a function",
"param": "email",
"location": "body"
}
]
}
我尝试使用其他方法,例如 findOne
.custom(value => {
return User.findOne({value}).then(user => {
if (user) {
return Promise.reject('E-mail already in use');
}
});
})
它确实有效,但是,它 return 响应重复,即使电子邮件不重复但写入 db
{
"errors": [
{
"value": "boka1@gmail.com",
"msg": "E-mail already in use",
"param": "email",
"location": "body"
}
]
}
有没有我遗漏的东西谢谢。
在 mongoose
中,在名为 findUserByEmail
的模型上没有这样的方法,这就是您收到该错误的原因。
您可以改用findOne
。如果你坚持,我认为你应该在你的模型中自己定义它。
User.findUserByEmail = (email) => {
return this.findOne({ email: email })
// or return User.findOne({ email: email })
}
.custom((value, { req }) => {
return new Promise((resolve, reject) => {
User.findOne({ email: req.body.email }, function(err, user) {
if (err) {
reject(new Error("Server Error"));
}
if (Boolean(user)) {
reject(new Error("E-mail already in use"));
}
resolve(true);
});
});
}),
检查这个...
我正在使用 nodejs 和 mongoose,使用 express-validator 来验证电子邮件重复,
check("email")
.custom(value => {
return User.findUserByEmail(value).then(user => {
if (user) {
return Promise.reject('E-mail already in use');
}
});
})
当使用重复的电子邮件发帖时,我收到错误提示
{
"errors": [
{
"value": "boka@gmail.com",
"msg": "User.findUserByEmail is not a function",
"param": "email",
"location": "body"
}
]
}
我尝试使用其他方法,例如 findOne
.custom(value => {
return User.findOne({value}).then(user => {
if (user) {
return Promise.reject('E-mail already in use');
}
});
})
它确实有效,但是,它 return 响应重复,即使电子邮件不重复但写入 db
{
"errors": [
{
"value": "boka1@gmail.com",
"msg": "E-mail already in use",
"param": "email",
"location": "body"
}
]
}
有没有我遗漏的东西谢谢。
在 mongoose
中,在名为 findUserByEmail
的模型上没有这样的方法,这就是您收到该错误的原因。
您可以改用findOne
。如果你坚持,我认为你应该在你的模型中自己定义它。
User.findUserByEmail = (email) => {
return this.findOne({ email: email })
// or return User.findOne({ email: email })
}
.custom((value, { req }) => {
return new Promise((resolve, reject) => {
User.findOne({ email: req.body.email }, function(err, user) {
if (err) {
reject(new Error("Server Error"));
}
if (Boolean(user)) {
reject(new Error("E-mail already in use"));
}
resolve(true);
});
});
}),
检查这个...