У меня проблемы с промежуточным программным обеспечением в моем приложении express, у меня есть следующий маршрут:
app.post(
'/api/auth/signup',
[
verifySignUp.checkDuplicateUsernameOrEmail,
verifySignUp.checkRolesExist
],
controller.signup
);
Есть два промежуточного программного обеспечения checkDuplicateUsernameOrEmail
и checkRolesExist
следующим образом:
const checkDuplicateUsernameOrEmail = (req, res, next) => {
console.log('checkDuplicateUsernameOrEmail');
User.findOne({username: req.body.username}).exec()
.then(user => {
if (user) {
console.log("user name exists");
return fail(res, {message: 'This username already exists'});
}
return User.findOne({email: req.body.email}).exec()
})
.then(user => {
if (user) {
return fail(res, {message: 'This email already exists'});
}
next();
})
.catch(error => {
console.log(error);
fail(res, {message: 'Database internal error occured.'});
});
};
const checkRolesExist = (req, res, next) => {
console.log('checkRolesExist');
console.log(req.body.roles);
for (const role of req.body.roles) {
if (!ROLES.includes(role)) {
return fail(res, {message: `${role} is not a valid role`});
}
}
next();
};
const fail = (res, err) => {
const message = err.message || 'Encountered a server error';
const status = err.status || 500;
res.status(status).json({status, message});
}
Я делаю запрос с именем пользователя, которое уже использовалось ранее, и в консоли я получаю user name exists
, как и ожидалось, однако приложение продолжает вызывать checkRolesExist
, выполнение промежуточного программного обеспечения не должно останавливаться, когда оно попадает возвращение? Что я делаю не так где?