Маршрутизація визначає, як застосунок відповідає на клієнтський запит до конкретної адреси (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.