2017-08-20 25 views
0

コントローラに渡されるコンテキストオブジェクトにviewjsonなどのメソッドを追加したいと思います。私は他のすべての前に実行されるミドルウェアで次の操作を行います。Koa2のコンテキストオブジェクトにヘルパーメソッドを追加する最も良い方法

async function(ctx, next){ 
    ctx.view = view.bind(ctx); 
    ctx.json = json.bind(ctx); 
    await next() 
    ctx.renderer.render(); 
} 

これらのメソッドは、ミドルウェアが解釈して、正しいctx.bodyを設定することにより、実際の応答をレンダリングするいくつかの従来の構成オブジェクト(レンダラー)を設定します。これにより、テンプレート言語を簡単に切り替えることができ、APIとテンプレート要求を結合するのが簡単になりました。

await next()の後には、コントローラによって設定されたものではなく、ctx.rendererがデフォルトのものであるため、動作しません。私はそれが名前空間の問題だと思うが、どこから来たのか分からない。

コンテキストを渡すことなくコンテキストを参照できるコンテキストに関数を割り当てるのがベストプラクティスですか?

答えて

1

いいえそれはhere in the docs私はそれを見逃してしまった、ドキュメントはレポの中にあり、ホストされていないので、ナビゲートが難しい。

TL; DR:app.contextを使用してコンテキストプロトタイプにアクセスします。関数を追加すると、それらをコンテキストオブジェクトに接続し、内部からthisを使用してアクセスすることができます。

関連する問題