#javascript #node.js #express
Вопрос:
Когда я добавляю следующую строку res.status(201).json({ email });
, я получаю сообщение об ошибке UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
. Что я могу сделать, чтобы решить эту проблему.
Ниже приведен фрагмент моего кода
module.exports.signup_post = (req, res ) => {
const { firstname, lastname, email, password } = req.body;
handleErrorSignup(firstname.trim(), lastname.trim(), email.trim(), password.trim())
.then( async (errors) => {
if(errors.firstname === '' amp;amp; errors.lastname === '' amp;amp; errors.email === '' amp;amp; errors.password === '') {
const hash = bcrypt.hashSync('password', 10);
try {
await db.none('INSERT INTO users(firstname, lastname, email, password) VALUES($1, $2, $3, $4)', [firstname, lastname, email, hash]);
const token = createToken(email);
res.cookie('jwt', token, { httpOnly: true, maxAge: maxAge * 1000 });
res.status(201).json({ email });
}
catch(err) {
res.status(400).send('Error, user not created');
}
res.redirect('/');
}
else {
res.status(400).json({ errors });
}
});
}
Ответ №1:
Проблема здесь в том, что вы уже отправляете ответ от try catch, поэтому вы не можете перенаправить, если вы уже отправили ответ из более ранних частей своего кода.
Вам нужно удалить эту строку из своего кода или перенаправить только в том случае, если ответ еще не отправлен в блоках try и catch.
try {
...
res.status(201).json({ email });
} catch (err) {
res.status(400).send('Error, user not created');
}
// Remove below code
res.redirect('/');
Если вы хотите перенаправить на свой домашний экран после регистрации, вам необходимо выполнить то же самое во внешнем интерфейсе на основе кода состояния или ответа, полученного для регистрации от бэкенда.
Комментарии:
1. ДА. Я должен был это убрать. Спасибо.