2016-01-24 122 views
0

模型/ user.js的如何处理node.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); 
      }); 
     } 
    }); 
} 

路由器/ 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('/'); 
     }); 
    } 
}); 

上述码是关于用户的注册代码。

在模型/ user.js的

我做了一个函数“的createUser”是获得新的用户,并发现其是否已经存在。但是,我不知道如何抛出自定义错误,“用户已经存在”..

我该怎么办?

我想是这样的:

// username already exists 
if(username) { 
    callback(new Error('username already exists')); 
} 

,但它没有工作!

要抛出错误消息“用户名已存在”,我该怎么办?

谢谢您的阅读。 :)

p.s) models/user.js - > createUser函数被定义。

routes/users.js - > createUser函数被附加到工作。

+0

为什么你会抛出一个错误,如果用户已经存在,不会告发你宁愿只是向客户端返回一些告诉用户用户名存在的东西吗? – adeneo

回答

0

您可以通过只以下节点的最佳实践进行处理并在回调返回错误

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) ... 

     ...... 

然后抓住它

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('/'); 
      } 
     }); 
    } 
});