koa2:如何组织路由器控制器逻辑(中间件与非中间件)?

问题描述 投票:0回答:1

我有一个“控制器”中间件(连接到koa-router)。

我想知道组织我的“内部”应用程序逻辑的最佳方法是什么(超出我的控制器,连接到koa-router router.post('/', createCtrl)的中间件功能)。

  1. 第一种情况:“一切都是中间件”。我的控制器只是编写了逐步从初始请求对象转到适合的响应对象所需的中间件函数集。 (我通过ctx.state阅读并传递下一个中间件所需的参数)。 import * as view from './views' import * as repo from './repository' import * as response from '../../services/response' import { sign } from '../../services/jwt' import compose from 'koa-compose' const createCtrl = compose([ repo.create(), sign(), view.sessionUser(), response.success(201) ])
  2. 第二种情况:应用程序逻辑与Koa完全“分离”。控制器将是一个koa中间件,调用非中间件函数如下: import * as view from './views' import * as repo from './repository' import * as response from '../../services/response' import { sign } from '../../services/jwt' const createCtrl = async function (ctx) { try { const entity = await repo.create() const token = await sign(entity.id) const dto = view.sessionUser(token, entity) const response = response.success(201) response(ctx, dto) // <- this is also a middleware } catch(err) { ctx.throw(500, 'my not very well handled error') } }

将控制器视为中间件功能的组合是一个好主意吗?或者这是滥用中间件功能的意图?

javascript koa organization koa2 koa-router
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.