Express next
вызывается в конце вызова промежуточного программного обеспечения и передает управление следующему промежуточному программному обеспечению. Предыдущее промежуточное ПО не знает, как выполняется следующее промежуточное ПО. Промежуточное программное обеспечение может взаимодействовать одним способом, последнее промежуточное программное обеспечение обычно отвечает за отправку запроса.
Как объясняет документация Koa 2 , next()
возвращает результат следующего промежуточного программного обеспечения в стеке, то есть обещание:
app.use(async (ctx, next) => {
const start = Date.now();
await next();
const ms = Date.now() - start;
console.log(`${ctx.method} ${ctx.url} - ${ms}ms`);
});
Промежуточное ПО Koa может взаимодействовать двумя способами: нет необходимости, чтобы последнее промежуточное ПО в стеке отправляло ответ, назначение ответа можно было делегировать предыдущему промежуточному ПО. Поскольку ответ не отправляется явно, как res.send()
, но после завершения выполнения стека промежуточного программного обеспечения, его можно изменить в других промежуточных программах (это можно использовать как хорошее, так и плохое):
app.use(function thirdPartyMiddlewareWeCannotChange(ctx, next) {
if (!auth)
ctx.redirect('/login');
next();
});
app.use(router.routes());
router.get('/no-auth-here', (ctx) => {
ctx.status = 200;
ctx.body = 'hi';
});