# Роутінг

## Методи Route

Модуль Express містить клас Router, який може створювати модульні обробники маршрутів. Екземпляр Router - це по суті проміжний обробник і маршрутизатор. Його ще часто називають міні-додатком.

{% code title="my-router.js" %}

```javascript
const express = require('express');
const router = express.Router();

// базовий роутер
router.get('/', (req, res) => {
  res.send('Базовий роутер');
});

// роутер about
router.get('/about', (req, res) => {
  res.send('Роутер About');
});

module.exports = router;
```

{% endcode %}

Для легкості сприйняття коду можна було одразу реструктуризувати Router.

{% code title="my-router.js" %}

```javascript
const { Router } = require("express");
const router = Router();
```

{% endcode %}

Під'єднаємо модуль маршрутизації <mark style="background-color:red;">my-router.js</mark> у додаток:

{% code title="index.js" %}

```javascript
const myRouter= require('./my-router');
...
app.use('/my-router', myRouter);
```

{% endcode %}

Цей додаток тепер оброблятиме запити, адресовані ресурсам <mark style="background-color:red;">/my-router</mark> та <mark style="background-color:red;">/my-router/about</mark>.

Основні методи маршрутизації модуля Express:&#x20;

* <mark style="background-color:red;">get</mark>
* <mark style="background-color:red;">post</mark>
* <mark style="background-color:red;">put</mark>
* <mark style="background-color:red;">delete</mark>
* <mark style="background-color:red;">patch</mark>

### Метод all

Особливий метод маршрутизації <mark style="background-color:red;">app.all()</mark>, не є похідним від будь-якого методу <mark style="background-color:red;">HTTP</mark>. Метод <mark style="background-color:red;">all</mark> використовують для завантаження функцій проміжної обробки перед обробкою методів запитів.

Наприклад, у коді нижче обробник запуститься для усіх запитів /users, незалежно від використовуваного методу запиту HTTP.

```javascript
app.all('/users', (req, res, next) => {
  console.log('Anything method.');
  next(); // передаємо управління обробнику
});
```

## Методи відповіді

Обʼєкт відповіді (<mark style="background-color:red;">res</mark>) має методи для передачі відповіді клієнту. Якщо жоден метод не буде застосований, то клієнтський запит зависне.

<table><thead><tr><th width="172.5">Метод</th><th>Опис</th></tr></thead><tbody><tr><td><mark style="background-color:red;">res.download()</mark></td><td>Запрошення на завантаження файлу</td></tr><tr><td><mark style="background-color:red;">res.end()</mark></td><td>Завершення процесу відповіді</td></tr><tr><td><mark style="background-color:red;">res.json()</mark></td><td>Надсилання відповіді JSON</td></tr><tr><td><mark style="background-color:red;">res.jsonp()</mark></td><td>Надсилання відповіді JSON з підтримкою JSONP</td></tr><tr><td><mark style="background-color:red;">res.redirect()</mark></td><td>Перенаправлення відповіді</td></tr><tr><td><mark style="background-color:red;">res.render()</mark></td><td>Виведення шаблону представлення</td></tr><tr><td><mark style="background-color:red;">res.send()</mark></td><td>Надсилання відповіді різних типів</td></tr><tr><td><mark style="background-color:red;">res.sendFile()</mark></td><td>Надсилання файлу у вигляді потоку відповідей</td></tr></tbody></table>

## Ланцюжки методів <a href="#lancyuzhki-metodiv" id="lancyuzhki-metodiv"></a>

Часто використовуються різні запити, але з однаковим маршрутом. Для такого випадку існує синтаксис ланцюжків і з використанням методу <mark style="background-color:red;">app.route()</mark>. Оскільки шлях однаковий, то зручно створювати модульні маршрути. Це допомагає мінімізувати надмірність та кількість друкарських помилок.&#x20;

```javascript
app
  .route('/users')
  .get((req, res) => {
    res.send('Get a list of users');
  })
  .post((req, res) => {
    res.send('Add a user');
  })
  .put((req, res) => {
    res.send('Update user');
  });
```
