2017-07-15 3 views
0

J'utilise un module avec koa et ils ont seulement cette documentation qui est écrite dans koa v1 et non v2. et puisque je n'ai jamais utilisé v1 auparavant, je n'ai aucune idée de comment écrire ceci en v2.Migration de koa v1 vers v2

app 
    .use(body({ 
    IncomingForm: form 
    })) 
    .use(function *() { 
    console.log(this.body.user) // => test 
    console.log(this.request.files) // or `this.body.files` 
    console.log(this.body.files.foo.name) // => README.md 
    console.log(this.body.files.foo.path) // => full filepath to where is uploaded 
    }) 
+0

Avez-vous essayé de l'exécuter? Quel a échoué? –

+0

@Jonasw J'utilise koa v2, et tous mes routeurs koa sont également écrits en v2. le routeur ne fonctionne jamais avec d'autres routeurs écrits en v2. et je veux juste écrire tout en v2 –

+0

Je pense remplacer la fonction *() avec la fonction async (d), et cela avec d devrait le faire. –

Répondre

1

Changement de Koa v1 à v2 Koa est un processus assez simple. La seule raison de la version bump est qu'il utilise async fonctions au lieu de générateurs pour votre middleware.

Exemple v1 Middleware:

app.use(function* (next) { 
    yield next 
    this.body = 'hello' 
}) 

Exemple v2 Middleware:

app.use(async (ctx, next) => { 
    await next() 
    ctx.body = 'hello' 
}) 

utilisation async fonctions à la place de générateurs et accepter ctx en tant que paramètre au lieu d'utiliser this.

+0

puisque je suis vraiment habitué à koa, j'obtiens cette partie. mais je n'ai aucune idée de la façon de traiter 'console.log (this.body.files.foo.path)' –

+0

Je ne suis pas sûr de comprendre ce que vous voulez dire. Ce serait simplement 'ctx.body.files.foo.path' au lieu de' this.body.files.foo.path'. – saadq

+0

En outre, j'ai eu un problème dans l'exemple v2, j'étais encore accidentellement en utilisant un genreator au lieu d'une fonction 'async'. fixé maintenant – saadq

0

changer la function *()-async function(ctx)ctx dans koa2 est comme this dans koa1

voir: http://koajs.com/#context

+0

que dois-je faire avec ceci? 'console.log (this.body.files.foo.path)' –

+0

En supposant que vous ayez un analyseur de corps pour analyser le corps, vous feriez quelque chose comme 'console.log (ctx.request.body.files.foo.path) ' –

+0

J'utilise https://github.com/tunnckoCore/koa-betterbody. et n'a pas pu le comprendre –

0
app 
    .use(body({ 
    IncomingForm: form 
    })) 
    .use(function(ctx) { 
    console.log(ctx.body.user) // => test 
    console.log(ctx.request.files) // or `this.body.files` 
    console.log(ctx.body.files.foo.name) // => README.md 
    console.log(ctx.body.files.foo.path) // => full filepath to where is uploaded 
    })