Files

58 lines
4.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
id: 587d7fb1367417b2b2512bf3
title: Реалізація підпрограмного забезпечення з журналу запитів кореневого рівня
challengeType: 2
forumTopicId: 301514
dashedName: implement-a-root-level-request-logger-middleware
---
# --description--
Раніше ви ознайомились з функцією підпрограмного забезпечення `express.static()`. А зараз саме час більш детально розглянути, що таке підпрограмне забезпечення. Функції підпрограмного забезпечення це функції, які мають 3 аргументи: об'єкт запиту, об'єкт відповіді й наступна функція циклу запиту-відповіді додатку. Ці функції виконують певний код, який може мати побічний ефект на додаток і зазвичай додає інформацію до об'єктів запиту й відповіді. Ще вони можуть закінчити цикл, надіславши відповідь, коли стикаються з певними умовами. Якщо після завершення вони не надсилають відповідь, вони починають виконувати наступну функцію в стеку. Це запускає третій аргумент `next()`.
Розглянемо наступний приклад:
```js
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--
Підпрограмне забезпечення журналу кореневого рівня має бути активним
```js
(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--
```js
/**
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.
*/
```