如何从mongoose + express复制密钥中恢复

我已经使用mongoose创build了一个registry单,并表示3

它可能用户已经存在与该用户名,在这种情况下,我得到一个err.code 11000(重复键)。 我应该如何处理现有的用户?

这就是我现在正在做的….但我不确定检查错误代码是最好的方法:

user.save(function(err){ if ( err ) { console.log(err); console.log(err.code); //duplicate key if ( err.code == 11000 ) { req.flash('error', 'User already exists'); res.redirect('/signup'); return; } } res.locals.user = user; req.session.user = user; //res.locals.session = req.session; res.redirect('/'); }); 

有没有更好的方法来做到这一点?

尝试这个:

 user.save(function(err){ if ( err && err.code !== 11000 ) { console.log(err); console.log(err.code); res.send('Another error showed up'); return; } //duplicate key if ( err && err.code === 11000 ) { req.flash('error', 'User already exists'); res.redirect('/signup'); return; } res.locals.user = user; req.session.user = user; //res.locals.session = req.session; res.redirect('/'); }); 

你不会这样填写错误日志。

我还没有尝试过,但这是我所想的将避免导致一个错误:

 //look for existing user first user.findOne({ username: req.body.username }, function(err, user) { if ( err ) throw err; //existing user found, stop registration if ( user ) { res.flash('error', "That user already exists"); res.redirect('/signup'); return; } //create new user var user = new User({ username: req.body.username }); user.save(function(err){ if ( err ) throw err; res.flash('info', "Your account has been created"); res.redirect('/account'); }); });