这是我的代码
// on all routes that end with "users", do the following
router.route('/users')
.post(function(req, res, next) {
var user = new User();
user.username = req.body.username;
user.password = req.body.password;
User.find({username : user.username}, function(err, results){
if (results.length > 0) {
//if (err) res.send(err);
console.log('User exists: ', user.username);
res.send('User exists');
next();
}
});
user.save(function(err) {
if (err)
res.send(err);
res.json({
message: 'Created user.',
username: req.body.username,
password: req.body.password
});
});
})
User
只是一个Mongoose架构。
如果在第一次回调中找到用户名,我想发送“用户存在”的基本响应,然后退出。现在我收到一个错误,因为它移动到user.save
位并尝试向已经结束的响应写入更多信息。
如何完全退出User.find
块和.post
块?在普通的类C语言中,我只需执行return;
,但这样做只会退出User.find
块。
感谢您的帮助
答案 0 :(得分:2)
尝试在else
条件下编写另一个案例并返回这样的回调
router.route('/users')
.post(function(req, res, next) {
var user = new User();
user.username = req.body.username;
user.password = req.body.password;
User.find({username : user.username}, function(err, results){
if (results.length > 0) {
//if (err) res.send(err);
console.log('User exists: ', user.username);
res.send('User exists');
return next();
}else{
user.save(function(err) {
if (err)
return res.send(err);
return res.json({
message: 'Created user.',
username: req.body.username,
password: req.body.password
});
});
}
});
})
答案 1 :(得分:0)
在您当前的实现中,如果它找到了用户,它将运行您在回调中编写的任何内容。您的回调中恰好有next()
。 next()
将退出此路线并找到匹配的下一条路线。这意味着无论你写下什么,都不会被执行(我正在谈论user.save
部分。
无论如何,要回答您的问题,如果您希望它同时退出User.find
块和.post
,那么只需将next()
方法置于{{1}之下声明。
我希望这会有所帮助。