2016-01-24 80 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('/'); 
      } 
     }); 
    } 
});