2017-07-15 17 views
0

私はkoaでいくつかのモジュールを使用していますが、koa v1で書かれたこのドキュメントのみがv2ではありません。以前はv1を使用していなかったので、v2でこれをどのように記述するかはわかりません。 koa2でctxがkoa1koa v1からv2への移行

を参照してthisのようなものですfunction *()async function(ctx)

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

runnigを試しましたか?何が失敗した? –

+0

@Jonasw私はkoa v2を使用しています。私のkoaルータはv2でも書かれています。ルータはv2で記述された他のルータとは決して動作しません。私は単にv2ですべてを書きたいと思っています –

+0

私は関数*()を非同期関数(d)に置き換えると思います。これはdで行うべきです。 –

答えて

1

は興亜V2に興亜v1から変更するには、かなり単純なプロセスです。バージョンバンプの唯一の理由は、ミドルウェアのジェネレータの代わりにasync関数を使用していることです。

例V1ミドルウェア:

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

例V2ミドルウェア:

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

使用async機能代わりの発電機、および代わりthisを使用するパラメータとしてctxを受け入れます。

+0

で書かれているので、それはかなり複雑です。しかし、私は 'console.log(this.body.files.foo.path)'をどう対処するのか分かりません。 –

+0

あなたが何を意味するのか分かりません。これは単に 'this.body.files.foo.path'の代わりに' ctx.body.files.foo.path'になります。 – saadq

+0

また、私は例v2で問題を抱えていましたが、誤って 'async'関数の代わりにジェネレータを使用していました。今修正されました – saadq

0
+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 
    }) 
関連する問題