将辅助方法添加到 Koa2 中的上下文对象的最佳方法
Best way to add helper methods to context object in Koa2
我想将 view
和 json
等方法添加到传递给我的控制器的上下文对象中。我在一个先于其他一切运行的中间件中执行此操作:
async function(ctx, next){
ctx.view = view.bind(ctx);
ctx.json = json.bind(ctx);
await next()
ctx.renderer.render();
}
这些方法设置了中间件解释的一些常规配置对象 (Renderer),然后通过设置正确的 ctx.body
呈现出实际响应。这使我可以轻松切换模板语言,并更轻松地组合 API 和模板请求。
除了它不起作用,因为在 await next()
之后 ctx.renderer
是默认值,而不是控制器设置的值。我怀疑这是一个命名空间问题,但我不确定它来自哪里。
将函数附加到可以引用上下文而不将其传递给它们的上下文的最佳做法是什么?
好的 here in the docs 我只是错过了它,文档在存储库中并且没有托管,这使得它们很难导航。
TL;DR:使用 app.context
访问上下文原型。在那里添加函数会将它们附加到上下文对象,并允许您从内部使用 this
来访问它。
我想将 view
和 json
等方法添加到传递给我的控制器的上下文对象中。我在一个先于其他一切运行的中间件中执行此操作:
async function(ctx, next){
ctx.view = view.bind(ctx);
ctx.json = json.bind(ctx);
await next()
ctx.renderer.render();
}
这些方法设置了中间件解释的一些常规配置对象 (Renderer),然后通过设置正确的 ctx.body
呈现出实际响应。这使我可以轻松切换模板语言,并更轻松地组合 API 和模板请求。
除了它不起作用,因为在 await next()
之后 ctx.renderer
是默认值,而不是控制器设置的值。我怀疑这是一个命名空间问题,但我不确定它来自哪里。
将函数附加到可以引用上下文而不将其传递给它们的上下文的最佳做法是什么?
好的 here in the docs 我只是错过了它,文档在存储库中并且没有托管,这使得它们很难导航。
TL;DR:使用 app.context
访问上下文原型。在那里添加函数会将它们附加到上下文对象,并允许您从内部使用 this
来访问它。