2017-08-20 2 views
0

Je voudrais ajouter une méthode telle que view et json à l'objet de contexte transmis à mes contrôleurs. Je le fais dans un middleware qui fonctionne avant tout le reste:Meilleure façon d'ajouter des méthodes d'assistance à l'objet de contexte dans Koa2

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

ces méthodes définies un objet de configuration classique (Renderer) que les middleware et interprète rend ensuite la réponse réelle en définissant la ctx.body correcte. Cela me permet de changer facilement le langage des modèles et de combiner plus facilement les requêtes API et Template.

Sauf que cela ne fonctionne pas car après await next() le ctx.renderer est celui par défaut, pas celui défini par les contrôleurs. Je pense que c'est un problème de nom, mais je ne suis pas sûr d'où ça vient.

Quelle est la meilleure pratique pour attacher des fonctions au contexte qui peut référencer le contexte sans qu'il leur soit transmis?

Répondre

1

Ok c'est here in the docs Je viens juste de manquer, les docs sont dans un repo et ne sont pas hébergés, ce qui les rend difficiles à naviguer. TL; DR: utilisez app.context pour accéder au prototype de contexte.

L'ajout de fonctions les attache à l'objet contexte et vous permet d'utiliser this depuis l'intérieur pour y accéder.