web-dev-qa-db-ja.com

req.params、req.query、およびreq.bodyが存在するのはなぜですか?

私はNode.jsとExpressを使い始めて、呼び出しアプリのメソッドを変更すると、パラメーターがreq.param([name])req.body.[name]またはreq.queryにあることを確認しています。方法によって異なります。今私の質問は2つです。

  1. これら3つのオブジェクトの間にいくつかの違いはありますか? (別のメソッドが別のオブジェクトを補充する理由を説明できるもの)
  2. 単純なチェックでいっぱいの関数/モジュールを作成し、たとえばreq.bodyオブジェクトを変更してパラメーターを取得するたびにこのオブジェクトを呼び出すことができる場合、いくつかの「問題」はありますか?

編集:@ jfriend00の答えの後、私は私のジレンマをよりよく説明します:私はAPIを開発していて、さまざまなメソッドで渡されたデータをチェックできるモジュールを作成しますが、今のところ次のようなものを書いています:

if(req.method== 'PUT' || req.method=='POST')
    x=req.body.x;
else
    x=req.query.x;

そして私は最初に次のようなことをします:

if(req.query!=null)
    req.body=req.query;

したがって、後は、すべてのチェックでreq.bodyを制御し、他の制御は制御しません。それは悪い習慣だと思いますか?

6
Filippo1980

3つのプロパティはすべて、さまざまなソースから読み込まれます。

req.queryは、 http://foo.com/somePath?name=ted などのURLのクエリパラメータから取得されます。ここで、req.query.name === "ted"です。

req.paramsは、/song/:songidなどのルート定義のパラメーターに一致するURLのパスセグメントから取得されます。したがって、その指定と/song/48586、次にreq.params.songid === "48586"などのURLを使用するルートを使用します。

req.bodyプロパティは、フォームデータ(ボディコンテンツで送信される)がボディタグのプロパティに解析されたフォームポストから取得されます。

関心のあるデータのソースに一致する適切なプロパティを使用します。

Req.params、req.query、およびreq.bodyが存在するのはなぜですか?

3つの異なるタイプのデータへの簡単なアクセスを提供するため。

17
jfriend00