You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
-
场景一:需要提前返回的情况
譬如实现反向代理,当你的 Controller 请求被代理的数据,然后写入 body 和 headers 后,不希望再执行当前应用的后续中间件,避免被中间件里面的逻辑冲突(譬如后续中间件设置了个 security 或 read-time 的 header,覆盖了代理的值)
之前在 render 和 proxy 踩过类似的坑。
即假设有 2 个中间件洋葱,正常的流程是: mw1_before -> mw2_before -> controller -> mw2_after -> mw2_after
期望的流程是:mw1_before -> mw2_before -> controller
Koa 原来是必须执行完所有的中间件后,才会把 ctx.body 给输出。
https://github.com/eggjs/egg-http-proxy/blob/master/lib/http_proxy.js#L156 现在绕过 Koa 这段逻辑的方式就比较恶心。
可以考虑把 Koa 最后封装输出这段逻辑变为一个函数,然后 pipeline 提供一个 break 的方法,应该就可以解决了。
场景二:runInBackground
当我们 Controller 里面响应给用户数据后,有可能会需要写一条日志,或者发一个入库请求,但不希望这个请求阻塞用户响应。
在原来 Egg 里面有个 runInBackground 的方式。
需要讨论类似的方法,是在 core 里面提供,还是在上层提供。然后需要确保在这个方法执行过程中,Context 不会被收回。
Beta Was this translation helpful? Give feedback.
All reactions