在 Koa2 中向上下文对象添加辅助方法的最佳方法

Meg*_*esh 3 namespaces node.js koa koa2

我想将诸如view和 之类的方法添加json到传递给我的控制器的上下文对象中。我在一个先于其他一切运行的中间件中执行此操作:

async function(ctx, next){
  ctx.view = view.bind(ctx);  
  ctx.json = json.bind(ctx);
  await next()
  ctx.renderer.render();
}
Run Code Online (Sandbox Code Playgroud)

这些方法设置中间件解释的一些常规配置对象(渲染器),然后通过设置正确的ctx.body. 这使我能够轻松切换模板语言,并更轻松地组合 API 和模板请求。

但它不起作用,因为后面await next()ctx.renderer默认值,而不是控制器设置的值。我怀疑这是一个命名空间问题,但我不确定它来自哪里。

将函数附加到可以引用上下文而不将其传递给它们的上下文的最佳实践是什么?

Meg*_*esh 6

好的,它在文档中,我刚刚错过了它,文档位于存储库内并且没有托管,这使得它们难以导航。

TL;DR:用于app.context访问上下文原型。在那里添加函数会将它们附加到上下文对象,并允许您this从内部使用它来访问它。