Files

4.9 KiB
Raw Permalink Blame History

id, title, challengeType, forumTopicId, dashedName
id title challengeType forumTopicId dashedName
587d7fb2367417b2b2512bf7 Обробка POST запитів за допомогою body-parser 2 301520 use-body-parser-to-parse-post-requests

--description--

Крім GET, є ще одне спільне дієслово HTTP, це POST. POST - це типовий метод для надсилання даних клієнта з HTML формами. У методі REST, POST використовується для відправки даних, щоб створити нові елементи в базі даних (новий користувач або новий допис). Ви не зобов'язані мати базу даних у цьому проєкті, але ви все-таки дізнаєтесь, як опрацьовувати запити POST.

У таких запитах дані не з'являються в URL, він прихований у тілі запиту. Тіло є частиною HTTP-запиту, а також називається корисним навантаженням. Незважаючи на те, що дані не видимі в URL, це не означає, що вони приватні. Щоб зрозуміти чому, подивіться на необроблений вміст HTTP-запиту POST:

POST /path/subpath HTTP/1.0
From: john@example.com
User-Agent: someBrowser/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 20

name=John+Doe&age=25

Як ви можете побачити, тіло закодоване як рядок запиту. Це типовий формат, який використовується у HTML-формах. За допомогою Ajax, ви також можете використати JSON для обробки даних, що мають більш складну структуру. Існує також інший тип кодування: multipart/form-data. Цей файл використовується для завантаження бінарних файлів. У цій вправі ви будете використовувати тіло, кодоване посиланням. Щоб аналізувати дані, отримані з POST-запитів, необхідно встановити пакет body-parser. Цей пакет дозволяє використовувати низку підпрограмного забезпечення, який може декодувати дані в різних форматах.

--instructions--

Встановіть модуль body-parser до вашого package.json. Тоді require його у верхній частині файлу. Збережіть його у змінній під назвою bodyParser. Проміжне програмне забезпечення, що має обробити Url-закодовані дані, повертається за допомогою bodyParser.urlencoded({extended: false}). Передайте функцію, повернуту попереднім викликом типу app.use(). Зазвичай підпрограмне забезпечення потрібно встановити перед маршрутами, які залежать від нього.

Note: extended це опція конфігурації, яка вказує body-parser, який парсинг необхідно використати. Коли extended=false він використовує класичне кодування querystring бібліотеки. Коли extended=true він використовує qs бібліотеку для парсингу.

При використанні extended=false, значення можуть бути тільки рядками або масивами. Об'єкт повертається, коли використання querystring не успадковується прототипно від Object JavaScript за замовчування, і означає, що функції hasOwnProperty та toString не будуть доступні. Розширена версія дозволяє підвищити гнучкість даних, але вона перевершує JSON.

--hints--

Проміжне програмне забезпечення 'body-parser' має бути встановлено

(getUserInput) =>
  $.get(getUserInput('url') + '/_api/add-body-parser').then(
    (data) => {
      assert.isAbove(
        data.mountedAt,
        0,
        '"body-parser" is not mounted correctly'
      );
    },
    (xhr) => {
      throw new Error(xhr.responseText);
    }
  );

--solutions--

/**
  Backend challenges don't need solutions, 
  because they would need to be tested against a full working project. 
  Please check our contributing guidelines to learn more.
*/