Je suis coincé écrire un routeur d'authentification pour une application koa.Comment lancez-vous `yield next` dans une promesse ou un callback?
J'ai un module qui récupère des données de la BD puis les compare à la requête. Je veux exécuter seulement yield next
si l'authentification passe.
Le problème est que le module qui communique avec la base de données renvoie une promesse et si j'essaie d'exécuter yield next
à l'intérieur de cette promesse, j'obtiens une erreur. Soit SyntaxError: Unexpected strict mode reserved word
ou SyntaxError: Unexpected identifier
selon que le mode strict est utilisé ou non.
Voici un exemple simplifié:
var authenticate = require('authenticate-signature');
// authRouter is an instance of koa-router
authRouter.get('*', function *(next) {
var auth = authenticate(this.req);
auth.then(function() {
yield next;
}, function() {
throw new Error('Authentication failed');
})
});
Cela ne fonctionnerait pas car le rappel dans 'auth.then' ne serait pas exécuté avant le bloc if. C'est asynchrone. De plus, la valeur renvoyée des rappels ne serait pas stockée dans la variable 'authentication'. 'authenticized 'serait juste une autre promesse. –
Désolé, j'ai oublié un "rendement" Je vous assure que cela fonctionne parce que je travaille avec Koa depuis quelques mois et c'est comme ça que je le fais. – Tae
Il ne le serait pas, car la variable 'authenticated' serait simplement une promesse, donc l'instruction if passerait toujours. Si vous jetez un coup d'oeil à ma réponse, voici comment cela devrait être fait. Vous générez la promesse, puis enregistrez le résultat dans une variable, puis vous pouvez utiliser cette variable pour votre instruction if. –