2017-03-01 2 views
2

Pourquoi nous le faisonsPourquoi attendons-nous ensuite lors de l'utilisation des routeurs koa?

router.get('/data', async (ctx, next) => { 
    ctx.body = dummyjson.parse(data); 
    await next(); 
}); 

router.get('/data/:x', async (ctx, next) => { 
    const newData = dataRepeat.replace('%(x)', ctx.params.x); 
    ctx.body = dummyjson.parse(newData); 
    await next(); 
}); 

Quelle est l'utilisation de await next()

Il fonctionnerait très bien sans cela. Une chose similaire était attendue avec koa 1. yield next a été ajouté à la fin du routeur.

+0

[Cette réponse] (http://stackoverflow.com/questions/10695629/what-is-the-parameter-next-used-for-in-express) est pour Express, pas Koa mais son essentiellement le même raisonnement. – saadq

Répondre

1

Je vais essayer d'expliquer à l'aide d'un exemple très simle:

const Koa = require('koa'); 
const app = new Koa(); 

// middleware 
app.use(async function (ctx, next) { 
    console.log(1) 
    await next(); 
    console.log(3) 
}); 

// response 
app.use(ctx => { 
    console.log(2) 
}); 

app.listen(3000); 

Si vous appelez localhost:3000 dans votre navigateur, ce qui se passera dans votre application:

  • la première app.use que vous avez tiré ici était le middleware. Ainsi, le flux de demandes va dans celui-là en premier, les logs 1 à la console. Ensuite, lorsque vous voyez ce await next(), il descend vers use. Ici, nous enregistrons simplement 2 sur la console. Quand ceci est fini (et plus aucun autre attente n'est vu dans le second use, alors le flux remonte à la première personne qui attendait, jusqu'à ce que la seconde soit terminée.)
  • Ici, nous continuons avec la consignation 3 à la console .

Hope this fait

0

un peu plus clair. non, il ne faut pas. il est dépend de vos besoins. vous utilisez la fonction suivante() lorsque vous appelez le middleware suivant.

Chec k votre module de routeur et sa version. J'ai utiliser le module koa-router et sa version est 7.2.0 pour le routage. Il auto-poignée attendent ensuite.

'use strict'; 

const Koa = require('koa'), 
    router = require('koa-router'), 
    app = new Koa(); 

let pubRouter = new router(); 
let securedRouter = new router(); 

let mapper = require('./mapper'), 

// assign router to corresponding function 
mapper(pubRouter, securedRouter); 

app .use(logger(config.app.log))  
.use(bodyParser()) 
.use(pubRouter.routes()).use(pubRouter.allowedMethods()) 
    .use(jwt({ 
     secret: publicKey, 
     algorithms: ['RS256'] 
    })) 
    .use(async(ctx, next) => { 
     console.log('\n\n\n\n\n', ctx.state.user); 
     await next(); 
    }) 
    .use(securedRouter.routes()).use(securedRouter.allowedMethods()) 
    .use(async(ctx, next) => { 
     ctx.body = 'Invalid URL!!!'; 
    }); 

app.listen(port,() => console.log(`Server listening on port: ${port}`));