koa如何在任何地方获取当前上下文实例(ctx)?

发布于 2022-09-11 19:58:54 字数 682 浏览 13 评论 0

应用入口
    import * as Koa from 'koa';
    import * as Router from 'koa-router';
    import HomeController from './home-controller'
    
    const app = new Koa();
    const router = new Router();
    
    router.get('/', HomeController.hello )
controller
export default class HomeController {

  static hello(ctx) {     
    //这里是通过传参获取到当前上下文实例ctx
    return 'hello';
  }

}

上面的ctx是通过传参获取到的
如果我不想通过传参的方式获取ctx,而是在应用任何地方都能获取到ctx,应该如何做呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

红焚 2022-09-18 19:58:55

在应用的任何地方都能获取到 ctx 是不现实的,因为 ctx 是一个依赖当前请求而创造的上下文变量。

-----------更新-----------

根据楼主评论里的需求描述,我这里提供一个思路:

  1. 新建一个 Controller 基类,所有的 controller 均由该基类继承而来。该基类的构造函数中会传入 ctx 参数,并令 this.ctx = ctx
  2. 在路由处理处,koa 将 ctx 变量注入 path 对应的处理函数中,此处可以进行具体的 controller 子类的实例化,如此 controller 中将能够通过 this.ctx 访问 ctx 变量。
  3. 至于 service 层,根据其职责,实际上不必访问 ctx
是你 2022-09-18 19:58:55

你不会想放到global吧?不建议

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文