2017-07-06 4 views
1
//This is the user model 
const mongoose = require('mongoose'); 
const bcrypt = require('bcrypt'); 
const saltRounds = 10; 
const userSchema = mongoose.Schema({ 
    email: { 
    type: String, 
    index: { 
     unique: true 
    } 
    }, 
    password: { 
    type: String 
    } 
}); 

userSchema.pre("save", function(next) { 
    var user = this; 
    if (!user.isModified("password")) { 
    return next(); 
    } 

    bcrypt.genSalt(saltRounds, function(err, salt) { 
    if (err) { 
     return next(err); 
    } 
    bcrypt.hash(user.password, salt, salt, function(err, hashedPassword) { 
     if (err) { 
     return next(err) 
     } 
     user.password = hashedPassword; 
     next(); 
    }); 
    }); 
}); 

userSchema.methods.checkPassword = function(guess, cb) { 
    bcrypt.compare(guess, this.password, function(err, isMatch) { 
    cb(err, isMatch); 
    }); 
}; 
const User = mongoose.model('User', userSchema); 
module.exports = User; 


//The code below is the /signup route 
router.post('/signup', (req, res) => { 
    User.findOne({ 
    email: req.body.email 
    }, (err, user) => { 
    if (err) { 
     throw err; 
    } 

    if (user) { 
     // handle case for user already exists!! 
     res.json({ 
     success: false, 
     message: 'An account with this email already exists' 
     }); 
    } else { 
     var newUser = new User({ 
     email: req.body.email, 
     password: req.body.password 
     }); 

     newUser.save((err) => { 
     if (err) { 
      return res.send(err); 
     } 
     let jwtData = { 
      email: req.body.email 
     }; 

     let token = jwt.sign(jwtData, jwtSecret); 

     res.json({ 
      success: true, 
      token: token 
     }); 
     }); 
    } 
    }); 
}); 

wenn ich einen Post Anfrage/Anmeldung Weg mache ich diesen Fehler bekam in NodeJS Version 8.1.2:Unhandle Versprechen Ablehnung in node.js während mongooseSchema.pre mit ('speichern') Methode

(node: 8317) UnhandledPromiseRejectionWarning: Unbehandelte Versprechen Ablehnung (Ablehnung id: 1): Fehler: cb muss eine Funktion sein oder null, um ein Versprechen zurückzugeben

Die Route funktioniert gut, wenn ich die Mungo Pre-Methode entfernen. Aber ich möchte die Passwörter hacken. Bitte helfen Sie mir zu diesem Problem. Danke

Antwort

0

Ihr Pre-speichern Rückruf nimmt eine Funktion namens "getan", aber Sie rufen "nächste" statt.

es sein sollte:

userSchema.pre("save", function(next) { 
    ... 
} 
Verwandte Themen