Функции промежуточного программного обеспечения — это функции, которые имеют доступ к объекту контекста и следующей функции промежуточного программного обеспечения в цикле запроса-ответа приложения. Эти функции используются для изменения объектов запроса и ответа для таких задач, как синтаксический анализ тела запроса, добавление заголовков ответа и т. Д. Коа идет дальше, уступая «downstream» , а затем возвращает управление обратно «upstream» . Этот эффект называется каскадным .
Ниже приведен простой пример функции промежуточного программного обеспечения в действии.
var koa = require('koa'); var app = koa(); var _ = router(); //Simple request time logger app.use(function* (next) { console.log("A new request received at " + Date.now()); //This function call is very important. It tells that more processing is //required for the current request and is in the next middleware function/route handler. yield next; }); app.listen(3000);
Вышеуказанное промежуточное программное обеспечение вызывается для каждого запроса на сервере. Таким образом, после каждого запроса мы получим следующее сообщение в консоли.
A new request received at 1467267512545
Чтобы ограничить его конкретным маршрутом (и всеми его подчиненными маршрутами), нам просто нужно создать маршруты, как мы это делали для маршрутизации. На самом деле это промежуточное программное обеспечение только для обработки нашего запроса.
Например,
var koa = require('koa'); var router = require('koa-router'); var app = koa(); var _ = router(); //Simple request time logger _.get('/request/*', function* (next) { console.log("A new request received at " + Date.now()); yield next; }); app.use(_.routes()); app.listen(3000);
Теперь всякий раз, когда вы запрашиваете какой-либо подкаталог / request, только тогда он будет записывать время.
Заказ звонков промежуточного программного обеспечения
Одна из самых важных вещей в промежуточном программном обеспечении в Koa состоит в том, что порядок, в котором они записаны / включены в ваш файл, — это порядок, в котором они выполняются в нисходящем направлении. Как только мы достигаем оператора выхода промежуточного программного обеспечения, он переключается на следующее промежуточное программное обеспечение в очереди, пока мы не достигнем последнего. Затем мы снова начинаем движение вверх и возобновляем функции из операторов yield.
Например, в следующем фрагменте кода первая функция выполняется сначала до yield, затем второе промежуточное программное обеспечение до yield, затем третья. Поскольку у нас больше нет промежуточного программного обеспечения, мы начинаем двигаться обратно вверх, выполняя в обратном порядке, т. Е. Третий, второй, первый. Этот пример суммирует, как использовать промежуточное ПО способом Koa.
var koa = require('koa'); var app = koa(); //Order of middlewares app.use(first); app.use(second); app.use(third); function *first(next) { console.log("I'll be logged first. "); //Now we yield to the next middleware yield next; //We'll come back here at the end after all other middlewares have ended console.log("I'll be logged last. "); }; function *second(next) { console.log("I'll be logged second. "); yield next; console.log("I'll be logged fifth. "); }; function *third(next) { console.log("I'll be logged third. "); yield next; console.log("I'll be logged fourth. "); }; app.listen(3000);
Когда мы запустим «/» после запуска этого кода, на нашей консоли мы получим —
I'll be logged first. I'll be logged second. I'll be logged third. I'll be logged fourth. I'll be logged fifth. I'll be logged last.
Следующая диаграмма обобщает то, что на самом деле происходит в приведенном выше примере.
Теперь, когда мы знаем, как создать собственное промежуточное ПО, давайте обсудим некоторые из наиболее часто используемых промежуточных программ, созданных сообществом.
Стороннее промежуточное программное обеспечение
Список стороннего промежуточного программного обеспечения для экспресса доступен здесь. Ниже приведены некоторые из наиболее часто используемых промежуточных программ —
- КоА-bodyparser
- КоА-маршрутизатор
- КоА-статические
- КоА-компресс
Мы обсудим несколько промежуточных программ в следующих главах.