J'essaie d'enrouler ma tête autour de la façon dont koajs cascades en attendant "next()" avant de reprendre le traitement des requêtes. Pour autant que je sache, "next" se réfère simplement à la prochaine application app.use() dans le script.koa js: Que veut dire "next", et la cascade peut-elle être implémentée différemment?
Quelqu'un de plus familier avec koajs peut-il le confirmer? Par exemple, ce code (modifié à partir de koajs.com) fonctionnerait-il encore (foo et bar étaient "next")?
app.use(async (ctx, foo) => {
const start = Date.now();
await foo();
const ms = Date.now() - start;
ctx.set('X-Response-Time', `${ms}ms`);
});
app.use(async (ctx, bar) => {
const start = Date.now();
await bar();
const ms = Date.now() - start;
console.log(`${ctx.method} ${ctx.url} - ${ms}`);
});
app.use(async ctx => {
ctx.body = 'Hello World';
});
Y a-t-il quelque chose de magique à propos de l'utilisation de "next" (en plus de la bonne sémantique)? Je suppose que non, et le comportement est juste dépendant de l'ordre des arguments dans la fonction.
Si c'est le cas, alors comment est-il possible de contrôler le flux d'un app.use() à un autre? Par exemple quelque chose comme ce code pseudo:
app.use(async (ctx, a, b) => {
if (!ctx.something) {
await a();
} else {
await b();
}
}
let a = app.use(.....);
let b = app.use(.....);
Toute aide est appréciée, et aussi, ne hésitez pas à me pointer vers une ressource appropriée si je l'ai raté quelque chose de simple.