|
BackendExpressNode js

Огляд

Проміжні обробники (middleware) — це функції, які мають доступ до об’єкта запиту (req), об’єкта відповіді (res) і до наступної функції у циклі «запит — відповідь». Ця наступна функція зазвичай позначається як next.

Проміжні обробники можуть виконувати такі дії:

  • виконання будь-якого коду;
  • зміна об’єктів req і res;
  • завершення обробки запиту;
  • передача керування наступному middleware за допомогою next().

Якщо поточна middleware-функція не завершує запит, вона обов’язково має викликати next(), інакше запит зависне.



Базовий приклад
Ось простий застосунок Express:
var express = require('express');
var app = express();

app.get('/', function (req, res) {
    res.send('Hello World!');
});

app.listen(3000);

Створення middleware

var myLogger = function (req, res, next) {
    console.log('LOGGED');
    next();
};

Тут next() передає керування наступному middleware або обробнику маршруту. Це не частина API Node.js чи Express — це третій параметр функції обробника.

Хоча next можна назвати будь-як, прийнятим стандартом є саме next, і краще дотримуватись цього імені.

Підключення middleware до застосунку

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

var myLogger = function (req, res, next) {
    console.log('LOGGED');
    next();
};

app.use(myLogger);

app.get('/', function (req, res) {
    res.send('Hello World!');
});

app.listen(3000);

Тепер кожного разу при запиті до сервера в терміналі з’явиться “LOGGED”.

Важливо: порядок підключення middleware має значення. Якщо myLogger буде підключено після app.get('/'), він не буде викликаний, бо маршрут завершить відповідь раніше.

Додавання властивостей до запиту

var requestTime = function (req, res, next) {
    req.requestTime = Date.now();
    next();
};

Використання в застосунку:

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

var requestTime = function (req, res, next) {
    req.requestTime = Date.now();
    next();
};

app.use(requestTime);

app.get('/', function (req, res) {
    var responseText = 'Hello World!<br>';
    responseText += '<small>Запит надійшов о: ' + req.requestTime + '</small>';
    res.send(responseText);
});

app.listen(3000);

Тепер при запиті до кореневого маршруту на сторінці буде відображено час надходження запиту.

Підсумок

Завдяки доступу до req, res, next і повному API Node.js, можливості middleware у Express — практично безмежні: автентифікація, логування, обробка помилок, модифікація запитів, обробка заголовків тощо.

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