0

Express 3 にアップグレードした後、私は connect-flash の実装の「喜び」を体験し、それを機能させました。

私は次のように実装します:

var flash = require('connect-flash');

app.use(flash());

app.use( function (req, res, next) {
    res.locals.everyauth.user = req.user;
    res.locals.user = req.user;
    res.locals.flash = req.flash();
    next();
});

次のように、jade レイアウト テンプレート (すべてのページで使用され、flash.info、flash.warning などに同様の行があります) にフラッシュ アラートを表示します。

- if ('undefined' !== typeof flash.error && flash.error.length)
    - each msg in flash.error
        div.error= msg

「フラッシュが定義されていません」というエラーが発生したときに、エクスプレス経由で /login および /register ページをレンダリングする場合を除いて、すべて問題ありません。何か案は?

4

1 に答える 1

1

まあ、それはきれいではありませんが、私はこれの回避策を見つけました。基本的に、フラッシュメッセージを処理するエクスプレステンプレートのブロックに最初のifステートメントを追加しました。

- if (flash !== null)
    - if ('undefined' !== typeof flash.error && flash.error.length)
        - each msg in flash.error
            div.error= msg

    - if ('undefined' !== typeof flash.warning && flash.warning.length)
        - each msg in flash.warning
            div.warning= msg

    - if ('undefined' !== typeof flash.info && flash.info.length)
        - each msg in flash.info
            div.info= msg

    - if ('undefined' !== typeof flash.success && flash.success.length)
        - each msg in flash.success
            div.success= msg

次に、フラッシュをnullに設定するローカル変数をeveryauthのページレンダリングステートメントに追加しました(登録ページとログインページに1つ必要です)。

.registerView('register.jade')
    .registerLocals({
        title: 'Hi there, I am a register page',
        flash: null
    })

私が言ったように、それはきれいではありませんが、それは機能しているようです。

于 2012-12-12T13:41:23.097 に答える