models/user.js
var User = module.exports = mongoose.model('User',UserSchema);
module.exports.getUserByUsername = function(username, callback){
var query = {username:username};
User.findOne(query, callback);
}
module.exports.createUser = function(newUser, callback){
User.getUserByUsername(newUser.username,function(err,username){
if(err) throw err;
// username already exists
if(username){
// How can handle this error?
console.log('username already exists');
} else{
bcrypt.hash(newUser.password, 10, function(err,hash){
if(err) throw err;
newUser.password = hash;
newUser.save(callback);
});
}
});
}
router/users.js
router.post('/register',function(req,res,next){
var username = req.body.username;
var password = req.body.password;
var newUser = new User({
username:username,
password:password
});
req.checkBody('username','Username field is required').notEmpty();
req.checkBody('password','Password field is required').notEmpty();
var errors = req.validationErrors();
if(errors){
res.render('register',{
errors: errors,
username: username,
password: password
});
} else{
User.createUser(newUser,function(err,user){
if(err) throw err;
req.flash('success','You are now registered and may log in');
res.location('/');
res.redirect('/');
});
}
});
above codes are about a user registration code.
in models/user.js
I made a function 'createUser' that get a new User, and find whether it already exists. However, I don't know how to throw custom error, "User already exists"..
What should I do?
I tried like this :
// username already exists
if(username) {
callback(new Error('username already exists'));
}
but It didn't work!
To throw an error with a message "username already exsits", what should I do?
Thank you for reading. :)
ps) models/user.js -> createUser function was defined.
routes/users.js -> createUser function was attached to work.
You could handle this by just following Node best practices and return an error in the callback
module.exports.createUser = function(newUser, callback){
User.getUserByUsername(newUser.username, function(err, username) {
if(err) throw err;
if(username){
callback('username already exists', null); // callback(error, data) ...
......
Then catch it
router.post('/register',function(req,res,next){
... get data
if(errors){
res.render('register',{
errors: errors,
username: username,
password: password
});
} else {
User.createUser(newUser,function(err,user){
if(err) {
res.render('register',{
errors: err, // username already exists
username: username,
password: password
});
} else {
req.flash('success','You are now registered and may log in');
res.location('/');
res.redirect('/');
}
});
}
});
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.