2

アプリケーションを作成して保存するnode.jsの非常に単純なアプリケーションでテストしています。newPost 関数を使用して投稿フォームを表示し、savePost メソッドでデータを含む投稿を受け取ります。後者では(iformモジュールを使用して)検証を行い、以前と同じページを再度表示したいのですが、フォームにユーザーから送信されたデータと見つかったエラーを入力します。

私はこのような同様のコードを持っています。エラーが見つかった場合は、同じ jade ページをレンダリングします。ユーザーがF5を押したときに投稿リクエストを再度送信したくないので、パターンリダイレクトを適用してそこに到達したいのですが、機能します。

では、ポストリダイレクトを作成し、エラーを追加して受け取ったすべてのパラメーターを渡すポストメソッドから取得する通常の方法はどうですか? そうするのに役立つモジュールはありますか?

var prepareObject = function(req, res){
    var errors = {};
    if('iform' in req){
        errors = req.iform.errors;
    }
    return {title: 'Nuevo Post', body:req.body, errors: errors};
};

// mapped as /newPost (type GET)
exports.newPost = function(req, res){
    //show form to create post
    res.render('newPost', prepareObject(req, res));
}

// mapped as /savePost (type POST)
exports.savePost = function(req, res){
    if(req.iform.errors) {
        //there are errors: show form again to correct errors
        res.render('newPost', prepareObject(req, res));
    }else{
        //no errors: show posts
        res.redirect('/posts');
    }   
}
4

1 に答える 1

3

「newPost」テンプレートをレンダリングする代わりに、GET「/newPost」にリダイレクトできます。オートコンプリートを機能させるには、データをリダイレクト クエリに追加して (より高速に) レンダリングするか、データをセッションに追加します (レンダリング後にデータを削除することを忘れないでください)。ただし、後者のオプションではセッション ストアが必要です。

于 2012-12-18T13:15:43.023 に答える