0

node.js と Express を使用して CRUD Web アプリを作成しています。サーバー側の検証が失敗したときにデータ入力フォームにフラッシュ メッセージを表示する方法を考えています。フラッシュ メッセージにエクスプレス フラッシュを使用しています。

検証コードが機能し、エラーが返され、フラッシュ メッセージを作成します。

var errors = validateForm(req);
if(errors){
    req.flash('info',errors);
    res.render('edit', {messages: req.flash('info')}); 
}

そして、edit.jade ファイルにメッセージを表示します。

if messages.info
    p #{messages.info} 

問題は、特定のオブジェクトを編集していて、URL が /edit ではなく /edit/objectID であることです。ページの get は次のようになります。

router.get('/edit/:id', function(req, res) {
    var db = req.db;
    var collection = db.get('mydb');
    collection.find({ID: req.params.id},{},function(e,docs){
        res.render('edit', {"object" : docs});
    });
});

ページ ID を失うことなく、POST が送信された後にサーバー側の検証用にフラッシュ メッセージを追加することは可能ですか? 編集からのすべてのデータは必要ありません。うまくいけばエラーを検出するクライアント側の検証がありますが、サーバー側の検証エラーにより、ユーザーが去ったのと同じオブジェクトページに到達するようにしたいと思います。

4

1 に答える 1

1

post ルートを次のように宣言できます。

router.post('/edit/:id', function(req, res) {
    // logic to check for errors
    // if errors, set flash message and 
    // redirect to /edit/:id
});

次に、post ルートで ID を使用して、ユーザーがフォームを投稿したのと同じリソースの編集ページにリダイレクトできます。また、テンプレート内のフラッシュ エラー メッセージにアクセスすることもできます。

* 編集 * リダイレクト時にフラッシュを使用するには、ミドルウェアに追加する必要があります。

app.configure(function() {
   app.use(express.cookieParser('keyboard cat'));
   app.use(express.session({ cookie: { maxAge: 60000 }}));
   app.use(flash());
});
于 2015-02-17T10:32:22.580 に答える