Маршрут выхода из системы
router.get('/logout', (req, res) => {
delete req.session.returnTo;
req.flash('success', 'Successfully Logged Out!');
req.session.destroy();
res.redirect('/home');
})
Маршрут для рендеринга домашнего вида
app.get('/home',(req,res) =>{
const isLoggedIn = req.session.user ? true : false;
res.render('home', { isLoggedIn });
})
Домашний вид
<% } if (!isLoggedIn) { %>
<% if (success.length > 0 ) {%>
<div class = "alert alert-success alert-dismissible fade show" role = "alert">
<%= success %>
<alert type = "button" class = "btn-close" data-bs-dismiss = "alert" aria-label = "Close"></alert>
</div>
<% } %>
<% } %>
Объяснение основного вопроса
Мои вспышки работают нормально для всех остальных маршрутов и просмотра, например, входа в систему и регистрации. Единственная проблема, с которой я сталкиваюсь, заключается в том, что на моем маршруте выхода из системы после удаления сеанса флэш-сообщение не появляется.
когда я удалил код req.session.destroy(); Flash-сообщение сработало нормально, поэтому поискал в Интернете решение, но не нашел ничего полезного. ваша помощь будет очень оценена.
Как вы настроили express-session и connect-flash? Поделитесь кодом этих двух конфигураций.
@FanoFN да, я использую два запроса одновременно в своем коде
@Subha, я настроил их в своем файле main.js, и все запросы сеанса работают в других моих маршрутах, таких как post ang get
В «документации» Connect-Flash указаны The flash is a special area of the session used for storing messages. и Flash messages are stored in the session., поэтому вполне логично, что после уничтожения сеанса он больше не работает.





Как мы знаем, уничтожение сеанса повлияет на его зависимые ссылки, поэтому флэш-сообщения, если таковые имеются, хранятся в объекте сеанса. тоже будет потерян. Ниже приведены два обходных пути:
Используйте глобальное свойство, как показано ниже.
app.get('/logout', (req, res) => {
delete req.session.returnTo;
req.session.destroy();
global.location = 'logout';
res.redirect('/home');
});
app.get('/home', (req, res) => {
const isLoggedIn = req.session.user ? true : false;
if (global.location == 'logout') {
req.flash('message', 'Successfully Logged Out!');
delete global.location;
}
res.render('home', { isLoggedIn });
});
Используйте перенаправление со строкой запроса, как показано ниже.
app.get('/logout', (req, res) => {
delete req.session.returnTo;
req.session.destroy();
res.redirect(
require('url').format({
pathname: '/home',
query: {
location: 'logout',
},
})
);
});
app.get('/home', (req, res) => {
const isLoggedIn = req.session.user ? true : false;
if (req.query.location == 'logout') {
req.flash('message', 'Successfully Logged Out!');
}
res.render('home', { isLoggedIn });
});
Цитаты:
Как мне перенаправить в expressjs при передаче некоторого контекста?
как отправить экспресс-сообщение о выходе из системы или проверить, перенаправлено ли
У меня еще нет возможности протестировать ваш код, но у меня в голове возникает один вопрос: можем ли мы поместить в код более 1 запроса (
req)? Я имею в виду, работаете ли вы сейчас с кодом, в котором есть два (или более) запроса?