13

- 編集 -

私はこれを行うためにいくつかのミドルウェアを書きました: 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を使用するようにアドバイスしました。

したがって、ビューからセッションにアクセスできるようにするには、次のことを行う必要があります。

nb:コーヒースクリプトで

app.locals.use (req,res) ->
    res.locals.session = req.session

ビューからセッションデータにアクセスしてクリアするにはどうすればよいですか?ビューがレンダリングされた後、セッションの内容をクリアすることはできませんが、ビューに到達しないためクリアできません。この問題をどのように回避するかについて少し迷っていますか?

4

5 に答える 5

30

connect-flashミドルウェアを使用して、req.flash()機能をExpress3.0に戻すことができます。

于 2012-05-02T02:37:56.493 に答える
7

彼らは単にreq.flashをreq.session.messagesに移動したと思います

于 2012-09-18T20:53:08.347 に答える
5

上記のTimのリンクから:

このミドルウェアは、Express 3.xがフラッシュの直接サポートを削除した後、Express2.xから抽出されました。connect-flashは、この機能をExpress 3.x、およびその他のミドルウェア互換のフレームワークまたはアプリケーションに戻します。根本的な再利用性のために+1。

Express 2.xの3.xへの移行ページには、次のように記載されています。

  • req.flash()(セッションを使用する:req.session.messages = ['foo']または同様のもの)
于 2013-08-14T15:10:06.740 に答える
5

とのほかconnect-flashに、expressjsチームによって作成されたexpress-flashだけもありますflash(これはボーナスと見なします)。使い方はとても簡単:

インストール:

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

上記のコードがそれらをどのようにシフトするかに注意してください。配列を読んだだけの場合、フラッシュメッセージはセッション中にハングし続けます(これはリダイレクトに最適です)。

于 2015-04-19T06:04:22.837 に答える
1

connect-flashミドルウェアをインストールし、それを要求してから、

app.use(flash())前に表示する必要があることに注意してくださいapp.use(express.session...)

于 2013-09-24T04:29:11.957 に答える