Що таке параметри res та res у функціях Express?


183

У наступній функції Express:

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

Що таке reqі res? Що вони означають, що вони означають, і що вони роблять?

Дякую!


1
req== "request"// res=="response"
nilon

Відповіді:


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'ed. (Див. Розділ Як отримати параметри запиту 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.