避免 req.flash 删除中间件上的数据

Avoid req.flash delete data on middleware

我正在使用 connect-flash 和 express 来处理 flash 消息,但是当我读取该属性时,消息被删除了,例如:

正在定义即显消息:

req.flash("myMessage", "Hey!");

正在阅读消息:

console.log(req.flash("myMessage")); // Hey!
console.log(req.flash("myMessage")); // undefined

数据在第一次读取时被擦除,这是一个问题,因为我需要在中间件中读取 req.flash 的数据来过滤 http 请求,然后在控制器中(在另一个文件中) ) 我需要读取相同的 req.flash 数据,但我不能,因为在读取中间件时被删除了。

遇到这种情况我该怎么办?

消息存储在 req.session.flash 内部,参见 the source code

这意味着您可以通过直接索引到 req.session.flash["myMessage"] 来获取消息,而无需清除它。

从技术上讲,这是您不应依赖的 req.flash() 的实现细节,但我认为如果您将 connect-flash 的版本固定在您的要求中,它就足够安全了。