0
私はMongoDB、Express、NodeJSを使用して少しソーシャルネットワークを作っています。 パスワードを暗号化するためのミドルウェアを持つこのスキーマを持っています。ミドルウェアの誤解Mongoose
今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();
});
});
、それが関連しています場合、私は知らないが、毎回私は(SAVE使用)私のルートでは、これはpasswordValidatorsを実行します。 私はmongooseの文書を読んだが、私はこれについて何も理解していないように感じる。私が推測した解決策は、登録していないときにこのミドルウェアをスキップすることでしたが、実際にはどのように行うのかわかりません。ここで
事がマングースは、あなたが保存する前に行うすべてのバリデータを実行していることであるルート
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');
}
}
});
}
});