#javascript #node.js #express
#javascript #node.js #экспресс
Вопрос:
Продолжайте получать эту ошибку, указывающую на res.redirect … Я думал, что добавление ‘return’ исправит это, поскольку это позволяет завершить промежуточное программное обеспечение, но ошибка сохраняется
вот функция
app.post('/login', (req,res) => {
//set this up with passport ideally... auth with db
var username = req.body.email
var password = req.body.password
User.findOne({email:username})
.then(user => {
if(user) {
bcrypt.compare(password, user.password, function(err, result) {
if(err) {
//maybe send this back in res json?
console.log(err)
return res.redirect('/login')
}
else if(result){
//let token = jwt.sign({name:user.name}, )
req.session.user = user.dataValues
console.log('Login successful')
return res.redirect('/dashboard'); //error happening here
}else {
console.log('Password does not match')
return res.redirect('/login')
}
})
}
})
res.redirect('/')
})
И вот мой вывод
Login successful
undefined:0
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at ServerResponse.setHeader (_http_outgoing.js:533:11)
at ServerResponse.header (/Users/sherm/Documents/daily_email/node_modules/express/lib/response.js:771:10)
at ServerResponse.location (/Users/sherm/Documents/daily_email/node_modules/express/lib/response.js:888:15)
at ServerResponse.redirect (/Users/sherm/Documents/daily_email/node_modules/express/lib/response.js:926:18)
at /Users/sherm/Documents/daily_email/server.js:79:27 {
code: 'ERR_HTTP_HEADERS_SENT'
}
npm ERR! code ELIFECYCLE
Комментарии:
1. Почему у вас
res.redirect('/')
внизу? Удалите его.
Ответ №1:
Проблема в том, что вы вызываете res.redirect('/')
(строка 27 вашего примера), прежде User.findOne(...).then
чем запускается. Следовательно, в случае, если пользователь найден, заголовки ваших результатов уже отправлены этим перенаправлением.
Вместо этого попробуйте это:
...
User.findOne({email:username})
.then(user => {
if(user) {
...
} else
res.redirect('/')
})
...