Что такое параметры «res» и «req» в функциях Express?


183

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

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

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

Спасибо!


1
req== "request"// res=="response"
Нилон

Ответы:


270

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()вызов.
  • Массив заголовков 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);
});

1
Вы можете использовать curl, чтобы увидеть ответ с заголовками
generalhenry

3
Вы можете проверить: en.wikipedia.org/wiki/Hypertext_Transfer_Protocol . Не будь язвительным, это то, что каждый из нас, кто разрабатывает для Интернета, должен знать!
TK-421

7
Да, это было здорово, должно быть на главной странице сайта express.js.
Антон

expressnoob - ответ - это объект, как и объект запроса, но он содержит поля и методы, относящиеся к ответу. Обычно используется ответный метод send (). send () принимает целую кучу разных типов для первого аргумента, который становится телом ответа HTTP, а вторым аргументом является код ответа HTTP.
grantwparks

7
Если кто - то ищет детали reqи resструктуры, описано в экспресс - документы: req: expressjs.com/en/api.html#req , res: expressjs.com/en/api.html#res
АКН

25

Я заметил одну ошибку в ответе Дейва Уорда (возможно, недавнее изменение?): Параметры строки запроса включены 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);
});

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


6

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

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


3
Это не помогает; вывод в консоли - [объект Object].
JEC

Если вы хотите json, вы должны: console.log (JSON.Stringify (req.body);
maridob
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.