[eggjs/egg]mongoose的hook或者叫middleware中,如何获取当前ctx?

2024-06-28 768 views
4

在一次请求上下文中,对mongodb数据库进行操作,此时会触发数据库的middleware函数,并且需要使用ctx 1 无法直接获取ctx 2 因为和当前请求相关,也无法使用匿名ctx 3 也无法向middleware函数传递ctx参数 这种场景应该如何获取当前ctx呢?

回答

6

给一个例子,提供一个复现 github repo?我给你改改。

4

现在不是遇到了bug,是在寻求一个解决方案 比如egg-mongoose 在egg初始化时,注册了一个middleware schema.post('find', { document: false, query: true }, async function(docs, next) { //middleware 代码 //代码这里需要使用当前请求的ctx,如何去拿到这个ctx });

5

如果你是使用 egg v3,那么可以通过 app.currentContext 拿到当前的 ctx

6

哦,这个强,我看看,是全新版本?

9

强烈支持

4

@fengmk2 egg v3 如何升级呢?

2

升级测试了,app.currentContext确实可以拿到当前ctx, 但是mongoose hook里还是无法拿到,可能是因为mongoose hook和ctx的调用不是在同一个调用栈的原因, 自己解决了,通过覆盖插件的ctx.mode,使用闭包封装ctx,可以拿到