Используем Middlewares в Express
Express представляет собой мощный и расширяемый фреймворк для приложений Node.js, и некоторые вещи в нём можно делать абсолютно прозрачно для логики приложения. Одна из таких возможностей — middleware.
Middlewares — это промежуточный слой приложения, который вызывается между приёмом запроса Express-ом и вашим обработчиком запроса.
Допустим, у нас есть следующие API:
const express = require('express'); const app = express(); app.get('/person', (req, res) => res.send({name: 'Ivan'})); app.listen(3000);
Пусть это будет нашей бизнес-логикой. Будем добавлять новый функционал, используя только middleware.
Допустим, мы хотим залогировать текущее время запроса. Это можно легко сделать:
const express = require('express'); const app = express(); app.use((req, res, next) => { console.log(new Date().toISOString()); next(); }); app.get('/person', (req, res) => res.send({name: 'Ivan'})); app.listen(3000);
Обратите внимание, на методы use — в данный метод мы можем передать callback специального вида. Функция next необходима для передачи управления следующему middleware или, в нашем случае, — обработчику запросов.
Давайте, добавим HTTP Basic-аутентификацию для всех методов. Как и полагается аутентификации, данный middleware нужно поместить перед всеми обработчиками и другими middleware:
app.use((req, res, next) => { // user:password if (req.header('Authorization') !== 'Basic dXNlcjpwYXNzd29yZA==') { res.header('WWW-Authenticate', 'Basic'); res.sendStatus(401); } else { next() } });
Обратите внимание, что добавление функционала происходит абсолютно прозрачно для бизнес-логики.
Существует множество стандартных middleware:
- body-parser — позволяет распарсить тело запроса из JSON в объект. А также рашифровать URL-Encoded параметры запроса;
- cookie-parser — позволяет просто работать с Cookies;
- serve-static — позволяет отдавать Express статический веб-контент;
- и многие многие другие.