HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <p>Теги: фреймворк, node.js, middlewares, express</p>
1 <p>Теги: фреймворк, node.js, middlewares, express</p>
2 <p>Express представляет собой мощный и расширяемый фреймворк для приложений Node.js, и некоторые вещи в нём можно делать абсолютно прозрачно для логики приложения. Одна из таких возможностей -<strong>middleware</strong>.</p>
2 <p>Express представляет собой мощный и расширяемый фреймворк для приложений Node.js, и некоторые вещи в нём можно делать абсолютно прозрачно для логики приложения. Одна из таких возможностей -<strong>middleware</strong>.</p>
3 <p>Middlewares - это промежуточный слой приложения, который вызывается между приёмом запроса Express-ом и вашим обработчиком запроса.</p>
3 <p>Middlewares - это промежуточный слой приложения, который вызывается между приёмом запроса Express-ом и вашим обработчиком запроса.</p>
4 <p>Допустим, у нас есть следующие API:</p>
4 <p>Допустим, у нас есть следующие API:</p>
5 const express = require('express'); const app = express(); app.get('/person', (req, res) =&gt; res.send({name: 'Ivan'})); app.listen(3000);<p>Пусть это будет нашей бизнес-логикой. Будем добавлять новый функционал, используя только middleware.</p>
5 const express = require('express'); const app = express(); app.get('/person', (req, res) =&gt; res.send({name: 'Ivan'})); app.listen(3000);<p>Пусть это будет нашей бизнес-логикой. Будем добавлять новый функционал, используя только middleware.</p>
6 <p>Допустим, мы хотим залогировать текущее время запроса. Это можно легко сделать:</p>
6 <p>Допустим, мы хотим залогировать текущее время запроса. Это можно легко сделать:</p>
7 const express = require('express'); const app = express(); app.use((req, res, next) =&gt; { console.log(new Date().toISOString()); next(); }); app.get('/person', (req, res) =&gt; res.send({name: 'Ivan'})); app.listen(3000);<p>Обратите внимание, на методы<strong>use</strong>- в данный метод мы можем передать callback специального вида. Функция next необходима для передачи управления следующему middleware или, в нашем случае, - обработчику запросов.</p>
7 const express = require('express'); const app = express(); app.use((req, res, next) =&gt; { console.log(new Date().toISOString()); next(); }); app.get('/person', (req, res) =&gt; res.send({name: 'Ivan'})); app.listen(3000);<p>Обратите внимание, на методы<strong>use</strong>- в данный метод мы можем передать callback специального вида. Функция next необходима для передачи управления следующему middleware или, в нашем случае, - обработчику запросов.</p>
8 <p>Давайте, добавим HTTP Basic-аутентификацию для всех методов. Как и полагается аутентификации, данный middleware нужно поместить перед всеми обработчиками и другими middleware:</p>
8 <p>Давайте, добавим HTTP Basic-аутентификацию для всех методов. Как и полагается аутентификации, данный middleware нужно поместить перед всеми обработчиками и другими middleware:</p>
9 app.use((req, res, next) =&gt; { // user:password if (req.header('Authorization') !== 'Basic dXNlcjpwYXNzd29yZA==') { res.header('WWW-Authenticate', 'Basic'); res.sendStatus(401); } else { next() } });<p>Обратите внимание, что добавление функционала происходит абсолютно прозрачно для бизнес-логики.</p>
9 app.use((req, res, next) =&gt; { // user:password if (req.header('Authorization') !== 'Basic dXNlcjpwYXNzd29yZA==') { res.header('WWW-Authenticate', 'Basic'); res.sendStatus(401); } else { next() } });<p>Обратите внимание, что добавление функционала происходит абсолютно прозрачно для бизнес-логики.</p>
10 <p>Существует множество стандартных middleware:</p>
10 <p>Существует множество стандартных middleware:</p>
11 <ul><li>body-parser - позволяет распарсить тело запроса из JSON в объект. А также рашифровать URL-Encoded параметры запроса;</li>
11 <ul><li>body-parser - позволяет распарсить тело запроса из JSON в объект. А также рашифровать URL-Encoded параметры запроса;</li>
12 <li>cookie-parser - позволяет просто работать с Cookies;</li>
12 <li>cookie-parser - позволяет просто работать с Cookies;</li>
13 <li>serve-static - позволяет отдавать Express статический веб-контент;</li>
13 <li>serve-static - позволяет отдавать Express статический веб-контент;</li>
14 <li>и многие многие другие.</li>
14 <li>и многие многие другие.</li>
15 </ul>
15 </ul>