Files

4.9 KiB
Raw Permalink Blame History

id, title, challengeType, forumTopicId, dashedName
id title challengeType forumTopicId dashedName
587d7fb1367417b2b2512bf3 Реалізація підпрограмного забезпечення з журналу запитів кореневого рівня 2 301514 implement-a-root-level-request-logger-middleware

--description--

Раніше ви ознайомились з функцією підпрограмного забезпечення express.static(). А зараз саме час більш детально розглянути, що таке підпрограмне забезпечення. Функції підпрограмного забезпечення це функції, які мають 3 аргументи: об'єкт запиту, об'єкт відповіді й наступна функція циклу запиту-відповіді додатку. Ці функції виконують певний код, який може мати побічний ефект на додаток і зазвичай додає інформацію до об'єктів запиту й відповіді. Ще вони можуть закінчити цикл, надіславши відповідь, коли стикаються з певними умовами. Якщо після завершення вони не надсилають відповідь, вони починають виконувати наступну функцію в стеку. Це запускає третій аргумент next().

Розглянемо наступний приклад:

function(req, res, next) {
  console.log("I'm a middleware...");
  next();
}

Припустімо, ви підключили цю функцію до маршруту. Коли запит збігається з маршрутом, відображається рядок “Im a middleware…“, потім виконується наступна функція в стеку. У цій вправі ви створите підпрограмне забезпечення кореневого рівня. Як ви бачили в завданні 4, щоб встановити функцію підпрограмного забезпечення на кореневий рівень, ви можете скористатись методом app.use(<mware-function>). У такому випадку ця функція виконається для всіх запитів, але ви також можете встановити конкретніші умови. Наприклад, якщо ви хочете виконати функцію лише для запитів POST, можна скористатись app.post(<mware-function>). Аналогічні методи існують для всіх дієслів HTTP (GET, DELETE, PUT, …).

--instructions--

Створіть простий журнал. Для кожного запиту в консолі має записуватись рядок в наступному форматі: method path - ip. Приклад виглядатиме так: GET /json - ::ffff:127.0.0.1. Зверніть увагу, що між method і path є пробіл, і що дефіс, який розділяє path і ip, виділено пробілами з обох сторін. Ви можете дізнатись метод запиту (дієслово http), відносний шлях маршруту й ip абонента з об'єкта запиту, скориставшись req.method, req.path і req.ip. Коли закінчите, не забудьте запустити next(), бо інакше ваш сервер заблокується назавжди. Обов'язково відкрийте “Журнал“ і подивіться, що відбувається, коли надходять певні запити.

Note: Вираз оцінює функції в тому ж порядку, в якому вони з'являються в коді. Це стосується й підпрограмного забезпечення. Якщо ви хочете, щоб це працювало для всіх маршрутів, встановіть його перед ними.

--hints--

Підпрограмне забезпечення журналу кореневого рівня має бути активним

(getUserInput) =>
  $.get(getUserInput('url') + '/_api/root-middleware-logger').then(
    (data) => {
      assert.isTrue(
        data.passed,
        'root-level logger is not working as expected'
      );
    },
    (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.
*/