【问题标题】: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/会话中获取消息,删除那个永久的,而不是将其存储为请求本地类型的变量。当它可以完成时,您会尽早执行此操作,然后在呈现视图时,它只会看到本地版本。

标签: node.js coffeescript express


【解决方案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。

          【讨论】:

            猜你喜欢
            • 2015-08-14
            • 1970-01-01
            • 1970-01-01
            • 2013-01-20
            • 1970-01-01
            • 2017-10-22
            • 2016-02-07
            • 2012-07-13
            相关资源
            最近更新 更多