【发布时间】:2019-11-30 17:24:11
【问题描述】:
我正在创建一个新用户并检查用户电子邮件以前是否存在。如果不是,那么它正在创建一个新用户并保存它。我需要什么来纠正我收到的这个验证错误?
我已经尝试过将名称设置为不需要。但是还是不行。
这是我的用户模型。
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
//Declaring User Model
const UserSchema = new Schema({
name: {
type: String,
required: true
},
password: {
type: String,
required: true
},
email: {
type: String,
required: true
},
avatar: {
type: String
},
date: {
type: Date,
default: Date.now
}
});
module.exports = User = mongoose.model("users", UserSchema);
这是用户路线。
router.post("/register", (req, res) => {
User.findOne({ email: req.body.email }).then(user => {
if (user) {
return res.status(400).json({ email: "email already exists" });
} else {
const avatar = gravatar.url(req.body.email, {
s: "200", //size
r: "pg", //rating
d: "mm" //default
});
const newUser = new User();
const newUser = {
name: req.body.name,
email: req.body.email,
avatar,
password: req.body.password
};
bcrypt.genSalt(10, (err, salt) => {
bcrypt.hash(newUser.password, salt, (err, hash) => {
if (err) throw err;
newUser.password = hash;
newUser
.save()
.then(user => res.json(user))
.catch(err => console.log(err));
});
});
}
});
});
我期待它被存储。这是我遇到的错误。
{ ValidationError: users validation failed: name: Path `name` is required.
at ValidationError.inspect (G:\devconnector\node_modules\mongoose\lib\error\validation.js:59:24)
at formatValue (internal/util/inspect.js:493:31)
at inspect (internal/util/inspect.js:191:10)
at Object.formatWithOptions (util.js:84:12)
at Console.(anonymous function) (console.js:191:15)
at Console.log (console.js:202:31)
at newUser.save.then.catch.err (G:\devconnector\routes\api\users.js:39:35)
at process._tickCallback (internal/process/next_tick.js:68:7)
errors:
{ name:
{ ValidatorError: Path `name` is required.
at new ValidatorError (G:\devconnector\node_modules\mongoose\lib\error\validator.js:29:11)
at validate (G:\devconnector\node_modules\mongoose\lib\schematype.js:1034:13)
at G:\devconnector\node_modules\mongoose\lib\schematype.js:1088:11
at Array.forEach (<anonymous>)
at SchemaString.SchemaType.doValidate (G:\devconnector\node_modules\mongoose\lib\schematype.js:1043:14)
at G:\devconnector\node_modules\mongoose\lib\document.js:2133:9
at process._tickCallback (internal/process/next_tick.js:61:11)
message: 'Path `name` is required.',
name: 'ValidatorError',
properties: [Object],
kind: 'required',
path: 'name',
value: undefined,
reason: undefined,
[Symbol(mongoose:validatorError)]: true } },
_message: 'users validation failed',
name: 'ValidationError' }
【问题讨论】:
-
have already tried by setting name as not required. But it still does not work.请仔细检查错误消息是否与您将 required 设置为 false 时相同。看起来类似的错误之后,它可能会引发与密码相关的错误。 -
抛出同样的错误。
标签: node.js mongodb express mongoose