web-dev-qa-db-ja.com

Express関数の「res」および「req」パラメーターとは何ですか?

次のエクスプレス機能では:

app.get('/user/:id', function(req, res){
    res.send('user' + req.params.id);
});

reqおよびresとは何ですか?彼らは何を意味し、何を意味し、何をしますか?

ありがとう!

162
expressnoob

reqは、イベントを発生させたHTTP要求に関する情報を含むオブジェクトです。 reqへの応答では、resを使用して、目的のHTTP応答を送り返します。

これらのパラメーターには任意の名前を付けることができます。より明確な場合は、このコードをこれに変更できます。

app.get('/user/:id', function(request, response){
  response.send('user ' + request.params.id);
});

編集:

この方法があるとします:

app.get('/people.json', function(request, response) { });

リクエストは、次のようなプロパティを持つオブジェクトになります(例を挙げると)。

  • request.url、この特定のアクションがトリガーされたときに"/people.json"になります
  • request.method、この場合は"GET"になります。したがって、app.get()呼び出しです。
  • request.headersのようなHTTPヘッダーの配列。request.headers.acceptなどのアイテムを含み、どの種類のブラウザーがリクエストを作成したか、どの種類の応答を処理できるか、HTTP圧縮を理解できるかどうかなどを決定できます。
  • request.queryにクエリ文字列パラメーターがある場合、その配列(たとえば、/people.json?foo=barは、ストリングrequest.query.fooを含む"bar"になります)。

その要求に応答するには、応答オブジェクトを使用して応答を作成します。 people.jsonの例を拡張するには:

app.get('/people.json', function(request, response) {
  // We want to set the content-type header so that the browser understands
  //  the content of the response.
  response.contentType('application/json');

  // Normally, the data is fetched from a database, but we can cheat:
  var people = [
    { name: 'Dave', location: 'Atlanta' },
    { name: 'Santa Claus', location: 'North Pole' },
    { name: 'Man in the Moon', location: 'The Moon' }
  ];

  // Since the request is for a JSON representation of the people, we
  //  should JSON serialize them. The built-in JSON.stringify() function
  //  does that.
  var peopleJSON = JSON.stringify(people);

  // Now, we can use the response object's send method to Push that string
  //  of people JSON back to the browser in response to this request:
  response.send(peopleJSON);
});
236
Dave Ward

Dave Wardの答えに1つのエラーがあることに気付きました(おそらく最近の変更?):クエリ文字列パラメーターはrequest.queryではなく、request.paramsにあります。 ( https://stackoverflow.com/a/6913287/1665 を参照)

request.paramsはデフォルトで、ルートの「コンポーネントの一致」の値で埋められます。

app.get('/user/:id', function(request, response){
  response.send('user ' + request.params.id);
});

また、POSTされたformdataでbodyparser(app.use(express.bodyParser());)を使用するようにexpressを構成した場合。 ( POSTクエリパラメータを取得する方法? を参照)

22
Myrne Stol

要求と応答。

reqを理解するには、console.log(req);を試してください。

4
generalhenry