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-flashexpress-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?的主要内容,如果未能解决你的问题,请参考以下文章

错误:req.flash() 需要会话

如何将 req.flash() 与 EJS 一起使用?

带有 Detours 3.0 Express 的简单数据包记录器

Socket.IO 错误“listen()”方法在迁移到 Express 3.0 后需要一个“http.Server”实例

C++ Detours 3.0 express on MVS 2012 错误“找不到标识符”

用正则表达式实现 计算器