2017-07-15 124 views
0

我在使用一些koa模塊,他們只有這個文檔寫在koa v1而不是v2。由於我以前從未使用過v1,因此我不知道如何在v2中編寫此代碼。將koa v1遷移到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

你試過跑步嗎?什麼失敗了? –

+0

@Jonasw我使用koa v2,我的整個koa路由器也是用v2編寫的。路由器從不與在v2中編寫的其他路由器一起工作。我只想寫在V2所有 –

+0

我認爲用異步函數(d)替換函數*(),這與d應該這樣做。 –

回答

1

從興亞改變V1到興亞v2是一個非常簡單的過程。版本顛簸的唯一原因是它使用async函數代替中間件的生成器。

實施例V1中間件:

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

實施例V2中間件:

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

使用async函數而不是發電機,並接受ctx作爲參數,而不是使用this

+0

之中,因爲我真的習慣了koa,我得到了這個部分。但我不知道如何處理'console.log(this.body.files.foo.path)' –

+0

我不知道我明白你的意思。它只是'ctx.body.files.foo.path'而不是'this.body.files.foo.path'。 – saadq

+0

另外,我在例子v2中遇到了一個問題,我不小心仍然使用genreator而不是'async'函數。現在修好 – saadq

0

變化function *()async function(ctx)其中ctx在koa2就像this在koa1

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

+0

該怎麼辦? 'console.log(this.body.files.foo.path)' –

+0

假設你有一個身體解析器來解析身體,你可以像'console.log(ctx.request.body.files.foo.path )' –

+0

我使用的是https://github.com/tunnckoCore/koa-better-body。並不能解決它 –

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 
    })