0

Express アプリケーションの一般的な get route の一部として、express-session と connect-flash を使用して 2 つのフラッシュ メッセージを送信したいと考えています。ページがレンダリングされる前に req.flash が保存されないことを除いて、これはすべて機能します。その結果、ユーザーが別のページまたは同じページを再度読み込むまで、フラッシュ メッセージは表示されません。

ルートの最後の関数のコード:

    Post.countDocuments().exec(function(err, count){
        if(err) {
            console.log(err);
            res.redirect("back");
        }

        req.flash("success", ["It's working", "Hallelujah!"]);
        req.flash("error", ["Uh oh!", "We have a problem..."]);

        res.render("index", {posts: allPosts, dates: dates, current: pageNumber, pages: Math.ceil(count / pageLimit), showing: showing, total: count});
    });

フラッシュ メッセージ テンプレート (ejs) の 1 つのコードは次のとおりです。

    <div class="flash flash-success">
        <div class="flash-header">
            <span class="flash-title flash-title-success"><i class="fas fa-check"></i> <%= success[0] %></span>
            <span class="flash-close" onclick="return closeFlash(this);"><i class="fas fa-times"></i></span>
        </div>

        <hr class="flash-hr">
        <div class="flash-body-success"><%= success[1] %></div>
    </div>

req.flash の後に .exec() を使用して、完了時に render ステートメントを実行しようとしましたが、これは機能しませんでした。コールバックで render ステートメントを使用して req.session.save() も試しましたが、これも失敗しました.

req.flash ステートメントの 1 つを削除したり、2 つの配列の代わりに文字列引数を 1 つだけ渡したりしても、この問題は解決されません。

4

1 に答える 1