gpt4 book ai didi

javascript - koa js : What does "next" refer to, 级联可以用不同的方式实现吗?

转载 作者:行者123 更新时间:2023-12-02 18:50:10 32 4
gpt4 key购买 nike

我试图通过在恢复请求处理之前等待“next()”来理解 koajs 级联的方式。据我所知,“下一个”只是指脚本中的下一个连续的 app.use() 。

有更熟悉 koajs 的人可以证实这一点吗?例如,这段代码(从 koajs.com 修改)是否仍然有效(foo 和 bar 曾经是“下一个”)?

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';
});

或者使用“next”有什么神奇的地方(除了良好的语义之外)?我假设不是,并且行为仅取决于函数中的参数顺序。

如果是这种情况,那么如何控制从一个 app.use() 到另一个 app.use() 的流程?例如像这样的伪代码:

   app.use(async (ctx, a, b) => {
if (!ctx.something) {
await a();
} else {
await b();
}
}

let a = app.use(.....);
let b = app.use(.....);

感谢任何帮助,如果我错过了一些简单的内容,请随时为我指出适当的资源。

最佳答案

调用中间件的第二个参数next并没有什么神奇之处。您可以随意将其命名为 foobar 或任何其他合法名称(当然, future 的程序员会发现它令人困惑!)。

Koa 中的中间件以类似堆栈的方式工作,因此不可能像第二个示例中那样提供多个中间件作为可能的“下一个”操作。

不过,您可以通过将中间件包装在彼此内部来实现条件执行。有个好的example在 Koa github 存储库中。

关于javascript - koa js : What does "next" refer to, 级联可以用不同的方式实现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45807464/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com