Вот мой кодвыход блока кода с курьерским и узлом
// 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 схемы.
Если имя пользователя найдено в этом первом обратном вызове, я хочу отправить основной ответ «Пользовательские Exists», а затем выйти. Прямо сейчас я получаю сообщение об ошибке, потому что он переходит на бит user.save
и пытается записать дополнительную информацию в ответ, который уже закончился.
Как я могу выйти из блока User.find
и блока .post
? На обычном C-подобном языке я просто делал бы return;
, но это делает только выход из блока User.find
.
Спасибо за любую помощь
Я думаю, что еще одна вещь, которая должна быть исправлена, заключается в том, что вы не вызываете 'next()' после 'res.send()'. Фактически 'next()' означает означать, что вы хотите, чтобы другие обработчики маршрутов продолжали обрабатывать этот маршрут, что не должно произойти, когда вы отправили ответ. – jfriend00
Да, @ jfriend00 это может быть, я обновляю ответ – abdulbarik
Спасибо, это должно это сделать. Просто для будущего, есть ли способ выйти из всего пути через цепочку обратных вызовов или вам просто нужно сделать код более умным, как вы сказали в своем ответе? – KingDan