|
BackendExpressNode js

Маршрутизація визначає, як застосунок відповідає на клієнтський запит до конкретної адреси (URI). Вступну інформацію з цієї теми можна знайти в розділі Основи маршрутизації.

Наведений нижче код демонструє один із найпростіших маршрутів:

var express = require('express');
var app = express();

// відповідь "hello world" на GET-запит до домашньої сторінки
app.get('/', function (req, res) {
    res.send('hello world');
});

Методи route

Метод маршруту — це похідний метод одного з HTTP-методів, який додається до екземпляра express.

Приклад маршрутів для GET та POST до кореневої адреси:

// GET
app.get('/', function (req, res) {
    res.send('GET-запит до головної сторінки');
});

// POST
app.post('/', function (req, res) {
    res.send('POST-запит до головної сторінки');
});

Express підтримує такі методи HTTP: get, post, put, head, delete, options, trace, copy, lock, mkcol, move, purge, propfind, proppatch, unlock, report, mkactivity, checkout, merge, m-search, notify, subscribe, unsubscribe, patch, search, connect.

Для методів, які не можуть бути дійсними іменами змінних у JavaScript, використовуйте квадратні дужки. Наприклад:

app['m-search']('/', function (...) {...})

Метод 

app.all()

Цей метод не прив’язаний до конкретного HTTP-методу й використовується для запуску функцій на будь-який запит.

app.all('/secret', function (req, res, next) {
    console.log('Доступ до секретного розділу...');
    next(); // передаємо керування наступному обробнику
});

Шляхи маршрутів

Шлях + метод = маршрут. Шляхи можуть бути рядками, шаблонами рядків або регулярними виразами. Усі шляхи обробляються за допомогою path-to-regexp.

Рядкові шляхи:

app.get('/', ...);           // /
app.get('/about', ...);      // /about
app.get('/random.text', ...);// /random.text

Шаблонні шляхи:

app.get('/ab?cd', ...);     // acd, abcd
app.get('/ab+cd', ...);     // abcd, abbcd, ...
app.get('/ab*cd', ...);     // abcd, ab123cd, abXYZcd
app.get('/ab(cd)?e', ...);  // abe, abcde

Регулярні вирази:

app.get(/a/, ...);          // будь-який маршрут з "a"
app.get(/.*fly$/, ...);     // закінчується на "fly"

Обробники маршрутів

Маршрут може мати кілька обробників (callback-функцій), як у middleware. Наприклад:

Один обробник:

app.get('/example/a', function (req, res) {
    res.send('Hello from A!');
});

Кілька обробників:

app.get('/example/b',
    function (req, res, next) {
        console.log('Будь готовий...');
        next();
    },
    function (req, res) {
        res.send('Hello from B!');
    }
);

Масив обробників:

var cb0 = function (req, res, next) { console.log('CB0'); next(); };
var cb1 = function (req, res, next) { console.log('CB1'); next(); };
var cb2 = function (req, res)       { res.send('Hello from C!'); };

app.get('/example/c', [cb0, cb1, cb2]);

Комбінування масиву та окремих функцій:

app.get('/example/d', [cb0, cb1],
    function (req, res, next) {
        console.log('...тепер відповідь');
        next();
    },
    function (req, res) {
        res.send('Hello from D!');
    }
);

Методи відповіді (res)

МетодОпис
res.download()Пропонує завантаження файлу
res.end()Завершує відповідь
res.json()Надсилає JSON
res.jsonp()JSONP-відповідь
res.redirect()Перенаправляє клієнта
res.render()Рендерить шаблон (view)
res.send()Надсилає будь-який тип відповіді
res.sendFile()Надсилає файл
res.sendStatus()Встановлює статус і надсилає повідомлення

app.route()

Цей метод дозволяє створити маршрут з ланцюжком методів:

app.route('/book')
    .get((req, res) => res.send('Отримати книгу'))
    .post((req, res) => res.send('Додати книгу'))
    .put((req, res) => res.send('Оновити книгу'));

express.Router

express.Router дозволяє створювати модульні маршрути, що можна монтувати у застосунок.

Файл birds.js:

var express = require('express');
var router = express.Router();

router.use(function timeLog(req, res, next) {
    console.log('Час: ', Date.now());
    next();
});

router.get('/', function (req, res) {
    res.send('Сторінка пташок');
});

router.get('/about', function (req, res) {
    res.send('Про пташок');
});

module.exports = router;

Імпорт у застосунок:

var birds = require('./birds');
app.use('/birds', birds);

Тепер запити до /birds і /birds/about будуть оброблятися окремим маршрутизатором із власним middleware timeLog.

Схожі матеріали