Я сейчас программирую с Node.js и пытаюсь проложить маршрут сброса пароля. Но когда я пытаюсь в Почтальоне, я получаю сообщение об ошибке в моем терминале:
this err ValidationError: email: Path `email` is required.
Я уверен, что ошибка в этом методе:
function(token, done) {
User.findOne({ email: req.body.email },
function(err, user) {
if (!user) {
return res.status(404).json({
error: "User not found"
});
}
console.log('step 1')
user.resetPasswordtoken = token;
user.resetPasswordExpires = Date.now() + 3600000; // 1 hour
console.log('step 2')
user.save(function(err) {
done(err, token, user);
});
});
}
Чтобы быть более точным, я уверен, что это находится в части.
user.save(function(err) {
done(err, token, user);
});
Вот моя схема пользователя
const userSchema = mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId,
email: {
type: String,
required: true,
unique: true,
match: /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/
},
firstname: {
type: String,
required: true
},
lastname: {
type: String,
required: true
},
password: {
type: String,
required: true
},
resetPasswordtoken: {
type: String,
required: false
},
resetPasswordExpires: {
type: Date,
required: false
}
});
Спасибо за вашу помощь.
Вот начало метода
router.post('/forgot', (req, res, next) => {
User.find({ email: req.body.email })
.exec()
.then(user => {
async.waterfall([
function(done) {
crypto.randomBytes(20, function(err, buf) {
var token = buf.toString('hex');
done(err, token);
});
},
function(token, done) {
//User.findOne({ email: req.body.email },
//function(err, user) {
if (!user) {
return res.status(404).json({
error: "User not found"
});
}
//}
console.log('step 1a')
console.log(req.body.email)
user.resetPasswordtoken = token;
user.resetPasswordExpires = Date.now() + 3600000; // 1 hour
console.log('step 2b')
user.save(function(err) {
done(err, token, user);
});