koa2: Как организовать логику контроллера маршрутизатора (промежуточное ПО против промежуточного)? - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть промежуточное ПО "контроллер" (подключено к коа-роутеру).

Мне интересно, каков наилучший подход к организации моей "внутренней" логики приложения (помимо моего контроллера, функция промежуточного программного обеспечения, подключенная к 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, вызывающим функции без промежуточного программного обеспечения следующим образом:

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

Является ли хорошей идеей думать о контроллере как о составе функций промежуточного программного обеспечения? Или это неправильное использование того, для чего предназначены функции промежуточного программного обеспечения?

1 Ответ

0 голосов
/ 14 сентября 2018

Лучший способ - это отделить логику от контроллера.Такое разделение позволит вам повторно использовать ту же логику в других частях приложения, и ее намного проще протестировать.

Пожалуйста, проверьте этот репозиторий: https://github.com/Talento90/typescript-node

У меня есть папка на сервере, гдеЯ помещаю всю серверную инфраструктуру, такую ​​как контроллеры и маршруты (оба разделены), и затем я передаю свои менеджеры на сервер.Менеджеры содержат логику приложения и передаются на сервер.

Подводя итог: логика приложения НИКОГДА не должна зависеть от инфраструктуры, в данном случае HTTP-сервера.

...