Ich erstelle ein kleines soziales Netzwerk mit MongoDB, Express, NodeJS. Ich habe dieses Schema mit einer Middleware zum Verschlüsseln des Passworts.
const passwordValidators = [
{
validator: passwordLengthChecker,
message: 'Password must be at least 5 characters but no more than 40'
},
{
validator:validPassword,
message: 'Must have at least one uppercase, lowercase, special character, and number'
}
];
/* ========
Schema for user
========= */
const userSchema=new Schema({
email: { type: String, required: true, unique: true, lowercase: true, validate: emailValidators},
username: { type: String, required: true, unique: true, lowercase: true, validate: usernameValidators},
password: { type: String, required: true,validate: passwordValidators},
bio: { type:String,default:null},
location: {type:String, default:null},
gender: {type:String,default:null},
birthday: { type:Date,default:null},
img: { type:String, default:null}
});
// Middleware that encrypt password
userSchema.pre('save',function(next){
if(!this.isModified('password'))
return next();
bcrypt.hash(this.password, null, null, (err,hash)=>{
if(err) return next(err);
this.password=hash;
next();
});
});
Nun, ich weiß nicht, ob es damit zusammenhängt, aber jedes Mal, wenn ich save() in meinen Routen verwende, führt dies die passwordValidators aus. Ich habe die Mungo-Dokumentation gelesen, aber ich habe das Gefühl, dass ich nichts davon verstehe. Die Lösung, die ich vermutet habe, bestand darin, diese Middleware einfach zu überspringen, wenn es sich nicht um eine Registrierung handelt, aber ich weiß tatsächlich nicht, wie das geht.
Hier ist die Strecke
router.post('/edit-photo', upload,function (req,res){
if (!req.file) {
res.json({success:false,message:"raté"});
}
else{
User.findOne({_id:req.decoded.userId},(err,user)=>{
if(err){
res.json({success:false,message:'Something went wrong: '+err});
}
else{
if (!user) {
res.json({success:false,message:'User not found'});
}
else{
user.img="Bloggy/uploads/profile/profile-pic-"+user.username;
user.save((err)=>{ // i get this err
if(err){
res.json({success:false,message:'Something went wrong: '+err});
}
});
console.log('réussi');
}
}
});
}
});
Die Sache ist, dass Mongoose alle Validatoren ausführt, die Sie vor dem Speichern erstellen.
Validierung ist Middleware. Mongoose registriert die Validierung standardmäßig als pre('save')-Hook in jedem Schema.
In meinem Fall musste ich nur
user.save({ validateBeforeSave: false },(err)=>{
if(err){
res.json({success:false,message:'Something went wrong: '+err});
}
else{
res.json({success:true,message:"Update to databse"});
}
});
um die Validierung für diese Route zu überspringen
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen