Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Koa 的中间件为什么不要使用 new #141

Open
lovelmh13 opened this issue Jul 26, 2021 · 0 comments
Open

Koa 的中间件为什么不要使用 new #141

lovelmh13 opened this issue Jul 26, 2021 · 0 comments

Comments

@lovelmh13
Copy link
Owner

Koa 是级联执行的,只会执行一次。

用校验器来举例:

router.post('/app/mergeGroup', checkTokenMiddleware(), new MergeGroupValidator(), appController.mergeGroup)

如果像上面的代码,把校验器通过中间件的方式来使用, new 来生成一个实例,例如 foo.a = 1。在下一次再次请求的时候,把 a 改成 2。第一次的请求拿到的也会是 a = 2。因为只在第一次的时候生成了一个实例。

如果不使用中间件,而是每次请求接口,都生成一个实例,则不会有上面提到的影响。

static async mergeGroup (ctx) {
    const v = new MergeGroupValidator().validate(ctx)
    const groupIds = v.get('body.groupIds')
}

所以,在使用中间件的时候,不要使用 new。 用函数则没有这种问题,但是函数不能像 new 一样方便保存变量。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant