发送后无法设置标头:response.redirect()NodeJS



我需要使用不同的response.redirect(),但我在控制台中遇到了一个错误。

错误代码:Unhandled rejection Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

我的代码:

// on vérifie si max par semaine atteint si c'est le cas on supprime la resa
if (moment(createdItem.date).isSame(new Date(), 'week')) {
createdItem.destroy().then(function() {
request.flash('danger', 'Total de réservation maximum par semaine atteint');
response.redirect('/user/__show');
});
}
// dans le cas d'un abonnement trouvé on touche pas aux cartes
if (findedRpaUserServiceSub) {
request.flash('success', 'Réservation ajoutée');
response.redirect('/user/__show');
}
// si on trouve une carte mais sans abonnement
if (findedRpaUserServiceCard) {
if ((findedRpaUserServiceCard.remaining_services - 1) === 0) {
findedRpaUserServiceCard.destroy().then(function() {
request.flash('success', 'Réservation ajoutée');
response.redirect('/user/__show');
});
} else {
findedRpaUserServiceCard.update({
remaining_services: findedRpaUserServiceCard.remaining_services - 1
}).then(function() {
request.flash('success', 'Réservation ajoutée');
response.redirect('/user/__show');
});
}
}

您正在多次重定向用户。这些if不是排他性的。您应该至少使用else if语句

// on vérifie si max par semaine atteint si c'est le cas on supprime la resa
if (moment(createdItem.date).isSame(new Date(), 'week')) {
createdItem.destroy().then(function() {
request.flash('danger', 'Total de réservation maximum par semaine atteint');
response.redirect('/user/__show');
});
}
// dans le cas d'un abonnement trouvé on touche pas aux cartes
else if (findedRpaUserServiceSub) {
request.flash('success', 'Réservation ajoutée');
response.redirect('/user/__show');
}
// si on trouve une carte mais sans abonnement
else if (findedRpaUserServiceCard) {
if ((findedRpaUserServiceCard.remaining_services - 1) === 0) {
findedRpaUserServiceCard.destroy().then(function() {
request.flash('success', 'Réservation ajoutée');
response.redirect('/user/__show');
});
} else {
findedRpaUserServiceCard.update({
remaining_services: findedRpaUserServiceCard.remaining_services - 1
}).then(function() {
request.flash('success', 'Réservation ajoutée');
response.redirect('/user/__show');
});
}
}
else {
// something else
}

您还可以在每个if中添加一个return以停止进一步的处理,或者如果您正在使用expressjs转到下一个中间件,则可以使用next()

最新更新