将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
})
从兴亚改变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
。
变化function *()
到async function(ctx)
其中ctx
在koa2就像this
在koa1
该怎么办? 'console.log(this.body.files.foo.path)' –
假设你有一个身体解析器来解析身体,你可以像'console.log(ctx.request.body.files.foo.path )' –
我使用的是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
})
你试过跑步吗?什么失败了? –
@Jonasw我使用koa v2,我的整个koa路由器也是用v2编写的。路由器从不与在v2中编写的其他路由器一起工作。我只想写在V2所有 –
我认为用异步函数(d)替换函数*(),这与d应该这样做。 –