flash - node js не принимает ошибку при обработке и не выводит ее на страницу
Пытаюсь обработать ошибку при помощи flash при непрвильно введеном email для смены пароля, но при перессылке на страницу обработчик ошибки пропадает. В чем может быть ошибка?
router.get('/reset', (req,res)=>{
res.render('auth/reset'),{
title: 'Смена пароля',
error: req.flash('error')
}
})
router.post('/reset', (req,res)=>{
try{
crypto.randomBytes(32, async(err,buffer)=>{
if(err){
req.flash('error', 'Что-то пошло не так, повторите попытку')
return res.redirect('/auth/reset')
}
const token = buffer.toString('hex')
const candidate = await User.findOne({email: req.body.email})
console.log(candidate)
if(candidate != null){
candidate.resetToken = token
candidate.resetTokenExp = Date.now() + 60 * 60 * 1000
await candidate.save()
await transport.sendMail(resetEmail(candidate.email, token, candidate.login))
res.redirect('/auth/login')
}else{
await req.flash('error','Пользователь не существует')
res.redirect('/auth/reset')
}
})
}catch(err){
console.log(err)
}
})
module.exports = router
hbs:
<main class="login_main">
<h1>Смена пароля</h1>
{{#if error}}
<p class="bad">{{error}}</p>
{{/if}}
<div class="login_reset">
<form action="/auth/reset" method="POST">
<input id="login_input1" type="login_reset-input" placeholder="Введите ваш email" name="email" required>
<button class="btn" type="submit">Сбросить</button>
<input type="hidden" name="_csrf" value="{{csurf}}">
</form>
</div>
</main>
Ответы (1 шт):
Автор решения: nörbörnën
→ Ссылка
В современном express нет никакого flash
Свойство "flash" не существует в типе
"Request<ParamsDictionary, any, any, ParsedQs, Record<string, any>>
Да и при переадрессации, скорее всего, теряется контекст.
Если вы хотите при переадресации передать какие-то параметры - передавайте их явно и обрабатывайте на в роуте, на который выполнена переадресация
res.redirect('/auth/reset?badlogin=1&reason=user_not_found')
