Я знаю, что на это отвечали тысячи раз, но я не могу на всю жизнь понять, почему он пытается отправлять заголовки более одного раза.Поэтому, пожалуйста, если вы собираетесь пометить как дубликат, объясните, почему это дубликат и где я ошибся.Ссылка редко бывает полезна без объяснения причин.
Хорошо, моя проблема.У меня есть простой маршрут подтверждения, который запускает промежуточное программное обеспечение / контроллер, когда я пытаюсь повторно отправить токен подтверждения во второй раз, чтобы реплицировать пользователя, щелкающего ссылку подтверждения, во второй раз, когда он сообщает мне строку, рядом с которой я указал, вызывает повторную отправку заголовков.
Токен для пользователя все еще находится в моей БД (планируйте изменить это), но это не должно иметь значения, поскольку строка, которая, кажется, вызывает ошибку, просто проверяет профиль пользователя, чтобы увидеть, проверен ли он.
router.post('/confirmation',
user.confirmationPost);
exports.confirmationPost = function (req, res, next) {
// Find a matching token
Token.findOne({ token: req.body.token }, function (err, token) {
if (!token) return res.status(400).send({ type: 'not-verified', message: 'We were unable to find a valid token. Your token my have expired.' });
// If we found a token, find a matching user
User.findOne({ _id: token._userId }, function (err, user) {
if (!user) return res.status(400).send({ message: 'We were unable to find a user for this token.' });
if (user.isVerified) return res.status(400).send({ message: 'This user has already been verified.' }); // THIS LINE CAUSES THE ERROR
// Verify and save the user
user.isVerified = true;
user.save(function (err) {
if (err) { return res.status(500).send({ message: err.message }); }
res.redirect(`${config.siteURL}/dash`);
});
});
});
next();
};
Сообщение об ошибке
Error: Can't set headers after they are sent.