У меня есть промежуточное ПО "контроллер" (подключено к коа-роутеру).
Мне интересно, каков наилучший подход к организации моей "внутренней" логики приложения (помимо моего контроллера, функция промежуточного программного обеспечения, подключенная к koa-router router.post('/', createCtrl)
).
Первый случай: "Все является промежуточным программным обеспечением" . Мой контроллер просто составляет набор функций промежуточного программного обеспечения, необходимых для постепенного перехода от исходного объекта запроса к хорошо подходящему объекту ответа. (Я читаю и передаю аргументы, необходимые для следующего промежуточного программного обеспечения, через 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)
])
Второй случай: логика приложения полностью «отделена» от Коа. Контроллер будет промежуточным программным обеспечением 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')
}
}
Является ли хорошей идеей думать о контроллере как о составе функций промежуточного программного обеспечения? Или это неправильное использование того, для чего предназначены функции промежуточного программного обеспечения?