2

構築中のアプリケーションに Node.JS で Express.JS を使用しています。ルートを設定し、RESTful アーキテクチャを維持するために最善を尽くしています。

フォーム入力を受け入れ、何らかのエラー (必ずしも検証エラーではない) が発生し、ユーザーに同じフォームを表示するが、最初にサーバーに送信したデータを含むプロセスは何ですか?

最初は、POST データをセッションに保存しましたが、これはハックのように、良い解決策だとは感じませんでした。

次に、ルートを調整し、代わりapp.post|put|del()にフォームの送信を処理するために使用し、そのルートをapp.all()使用して「キャッチオール」として使用しました。基本的に、エラーが発生した場合は、 を呼び出しnext()て、制御を「キャッチオール」ルートに戻します。これにより、元の RESTful アプローチから逸脱することになりました。

これで、RESTful アプローチをより正確に反映するようにルートを設定しました。ただし、を使用するapp.redirect()と、リダイレクトでデータが失われます。別のハックのように感じるものを使用することになりました: controller.new_form.apply(this, arguments);(これは 内で呼び出されますcontroller.create())

もちろん、クライアント側の検証を使用することもできますが、最初に完全にサーバー側で動作するアプリを作成するために最善を尽くしており、それがサポートされているユーザー エクスペリエンスを向上させる方法としてクライアント側のコードを追加しています。

フォーム自体とは異なるURIでフォームアクションを受け入れるexpress.js(またはconnect.js)で使用できるメソッドはありますが、実際にブラウザーをリダイレクトせずに戻ることができるため、フォームにデータが入力されたままになります(およびユーザーにエラーメッセージを表示しますか?

4

2 に答える 2

2

res.render成否に応じて別のテンプレートで呼び出すことはできませんか? POST されたすべてのフォーム データが検証された場合は、res.render 'thankyou.jade'そうでない場合はres.render 'form.jade'もう一度やり直しますか? これは kcbanner が提案するものに似ていますが、それぞれに個別のメソッドを定義していませんが、特別なロジックがある場合はこれを行うとよいでしょう。

于 2011-04-18T03:15:13.137 に答える
0

req と res を渡すだけで、他のビューからビューを呼び出すことができます。

例:

exports.index = function(req, res) {
  res.render('index');
};

exports.verify = function(req, res) {
  res.local('flash', 'Set a template local variable');
  exports.index(req, res);
};

ここでは、1 つのビューでテンプレートをローカルに設定し、別のビューを呼び出して実際に応答を処理します。ポスト ハンドラーで get ハンドラーを呼び出すことができます。

于 2011-04-17T17:33:21.413 に答える