在中间件中删除req.flash的数据会导致在后续的请求中无法访问到该数据。为了避免这种情况,可以在中间件中将要删除的数据保存到一个临时变量中,然后在下一个中间件中重新设置flash数据。
下面是一个示例代码:
// 中间件函数
const clearFlash = (req, res, next) => {
// 保存要删除的flash数据
const flashData = req.flash();
// 删除所有flash数据
req.flash();
// 将要删除的flash数据重新设置到req.flash中
Object.keys(flashData).forEach(key => {
req.flash(key, flashData[key]);
});
// 继续下一个中间件
next();
};
// 应用中间件
app.use(clearFlash);
// 路由处理函数
app.get('/', (req, res) => {
// 可以访问到之前保存的flash数据
const message = req.flash('message');
res.render('index', { message });
});
在上面的示例中,clearFlash中间件函数首先保存要删除的flash数据到flashData变量中。然后,使用req.flash()删除所有flash数据。接下来,使用Object.keys和forEach循环遍历flashData变量,并使用req.flash重新设置flash数据。最后,调用next()继续下一个中间件。
这样做的好处是,在后续的请求中,可以通过req.flash访问到之前保存的flash数据。
下一篇:避免在重新渲染后重新获取