Что такое промежуточное ПО?
Функции промежуточного ПО - это functions
, которые имеют доступ к request object (req)
, response object (res)
и next
функциям request-response cycle
приложения.
Следующая функция - это функция в маршрутизаторе Express, которая при вызове выполняет промежуточное программное обеспечение, заменяющее текущее промежуточное программное обеспечение.
request-response cycle
заканчивается, когда вы звоните res.send()
или res.end()
.
Зачем нужно промежуточное ПО в приложении?
- Выполнять любой код по каждому запросу.
- Внесите изменения в объекты запроса и ответа.
Пример
"use strict";
const express = require('express');
const app = express();
app.config = { PORT: 3000, ENV: process.env.NODE_ENV || 'development', HOST: '127.0.0.1' };
const midOne = (req, res, next) => { console.log("midOne"); next(); }
const midTwo = (req, res, next) => { console.log("midTwo"); next(); }
app.use((req, res, next) => { console.log(1); next(); });
app.use((req, res, next) => { console.log(2); next(); });
app.get('/', [midOne, midTwo], (req, res) => { res.send("Root"); });
app.get('/home', [midTwo], (req, res) => { res.send("Home"); });
app.listen(8080, () => { console.log(app.config); console.log("Server is running on port 8080"); });
Глобальный middleware
будет вызываться для каждого request
. Лучше keep clean
, как minimum
как использовать, всегда быть async
, избегать complex computation
.
Если какие-либо вычисления необходимы для нескольких маршрутов, они должны применяться к маршрутам.
Должен или не должен
- Если какое-либо промежуточное программное обеспечение работает на основе некоторого условия, лучше использовать условие вне промежуточного программного обеспечения.
// bad app.use((req, res, next) => { if(some condition) {} else {} next(); });
// good if(condition) { app.use((req, res, next) => { next(); }); }
- Всегда добавляйте конфигурацию / метаданные вне промежуточного программного обеспечения.
// bad
app.use((req, res, next) => {
app.config = {
PORT: 3000,
ENV: process.env.NODE_ENV || 'development',
HOST: '127.0.0.1'
};
next();
});
// good
app.config = {
PORT: 3000,
ENV: process.env.NODE_ENV || 'development',
HOST: '127.0.0.1'
};
app.use((req, res, next) => {
next();
});
Вот полный исходный код
https://github.com/rjoydip/better-middleware-use