将koa v1迁移到v2

问题描述:

我在使用一些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应该这样做。 –

从兴亚改变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

变化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。并不能解决它 –

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