Что такое параметры "res" и "req" в функциях Express? - PullRequest
163 голосов
/ 15 января 2011

В следующей экспресс-функции:

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

Что такое req и res? Что они обозначают, что они значат и что они делают?

Спасибо!

Ответы [ 3 ]

238 голосов
/ 15 января 2011

req - это объект, содержащий информацию о HTTP-запросе, вызвавшем событие. В ответ на req вы используете res для отправки желаемого ответа HTTP.

Эти параметры могут быть названы как угодно. Вы можете изменить этот код на этот, если он более понятен:

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

Edit:

Скажем, у вас есть этот метод:

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

Запросом будет объект с такими свойствами (вот лишь некоторые из них):

  • request.url, что будет "/people.json", когда будет выполнено это конкретное действие
  • request.method, что в данном случае будет "GET", следовательно, вызов app.get().
  • Массив заголовков HTTP в request.headers, содержащий такие элементы, как 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);
});
23 голосов
/ 02 февраля 2012

Я заметил одну ошибку в ответе Дэйва Уорда (возможно, недавнее изменение?): Параметры строки запроса находятся в request.query, а не request.params.(См. https://stackoverflow.com/a/6913287/166530)

request.params по умолчанию заполняется значением любых «совпадений компонентов» в маршрутах, т. Е.

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

и, если вы настроилиЭкспресс использовать его bodyparser (app.use(express.bodyParser());) также с форматы данных POST.(См. Как получить параметры запроса POST? )

5 голосов
/ 15 января 2011

Запрос и ответ.

Чтобы понять req, попробуйте console.log(req);.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...