Express 3.0 req.flash?
Posted
技术标签:
【中文标题】Express 3.0 req.flash?【英文标题】:Express 3.0 req.flash? 【发布时间】:2012-04-28 13:57:08 【问题描述】:-- 编辑--
我为此编写了一些中间件:https://npmjs.org/package/flashify
所以自 Express 3.0 发布以来,更改已删除 req.flash()
https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x(来源)
所以这是我现在的问题。他们建议在本地使用 req.session.messages 来显示 flash。
所以要让视图可以访问会话,我们必须执行以下操作:
nb:在咖啡脚本中
app.locals.use (req,res) ->
res.locals.session = req.session
我们如何从视图访问会话数据然后清除它?我们无法在视图渲染后清除会话的内容,但我们无法清除它,因为它不会到达视图,所以我有点迷茫如何解决这个问题?
【问题讨论】:
作为一个技术问题,您通常会从 cookie/会话中获取消息,删除那个永久的,而不是将其存储为请求本地类型的变量。当它可以完成时,您会尽早执行此操作,然后在呈现视图时,它只会看到本地版本。 【参考方案1】:除了connect-flash
和express-flash
,还有flash
,它是由expressjs 团队制作的(我认为这是一个奖励)。超级简单易用:
安装:
npm i flash
app.js:
app.use(session()); // session middleware
app.use(require('flash')());
app.use(function (req, res)
// flash a message
req.flash('info', 'hello!');
next();
)
view.jade:
while message = flash.shift() // consume messages as jade reads them
a.alert(class='alert-' + message.type)
p= message.message
注意上面的代码是如何移动它们的;如果您只是读取数组,则 Flash 消息会一直挂在会话中(这对于重定向来说非常棒)。
【讨论】:
【参考方案2】:安装connect-flash中间件,然后需要它
app.use(flash())
并注意它应该出现在app.use(express.session...)
之前
【讨论】:
【参考方案3】:来自上面蒂姆的链接:
这个中间件是从 Express 2.x 中提取的,在 Express 3.x 删除了对闪存的直接支持之后。 connect-flash 将此功能带回 Express 3.x 以及任何其他中间件兼容的框架或应用程序。 +1 彻底的可重用性。
Express 2.x migrate to 3.x page 说:
req.flash()
(只使用会话:req.session.messages = ['foo']
或类似)
【讨论】:
【参考方案4】:我相信他们只是将 req.flash 移至 req.session.messages
【讨论】:
【参考方案5】:您可以使用 connect-flash 中间件将 req.flash() 功能添加回 express 3.0。
【讨论】:
以上是关于Express 3.0 req.flash?的主要内容,如果未能解决你的问题,请参考以下文章
带有 Detours 3.0 Express 的简单数据包记录器
Socket.IO 错误“listen()”方法在迁移到 Express 3.0 后需要一个“http.Server”实例