Источник: https://habrahabr.ru/post/238095/
Собственно, Koa во многом похож на предшественника — Express, за исключением вездесущих callback`ов. Вместо них он использует сопрограммы, в которых управление может быть передано подпрограммам(thunk), обещаниям(promise), массиву с подпрограммами\соообещаниями, либо объекту. В некоторых местах даже сохранена некоторая обратная совместимость через группу функций co, написанных создателями Koa и многими последователями. Любая функция, которая раньше использовала callback, может быть thunkify`цирована для использования с co или Koa.
Выглядит это так:

При этом в result вернется data, а done(err) вызовет исключение, и функцию вы не покидаете, как это было бы с callback`ом, и интерпретатор не блокируете, выполнение переходит к следующему yield`у, и выглядит это изящно, другими словами — просто сказка.
Время писать код
Koa основан на middleware`ях, также как Express, но теперь они выполняются как сопрограмма, подобно Tornado в Python. Дальше пойдет код простого сайта и мои мысли. Структура проекта:
- node_modules
- src — Здесь весь исходный код
- server — Сервер
- app — Папка с приложениями
- public — Статика
- template — Шаблоны
- config — Файлы конфигурации
Так как предыдущим моим увлечением был Django, кому-то может показаться, что это сказалось на организацию кода в проекте. Возможно это правда, мне действительно нравится организовывать код в модули.
Заключение
На сладкое решил оставить обработку ошибок. От адептов Node.js и Express слышал, что это требует особой внимательности к каждому callback`у, и даже она не всегда помогает. Если вспомнить порядок выполнения middleware, глобальную обработку можно осуществить, просто добавив следующий код в начало обработки запроса:

Этим мы заключаем весь код проекта в try..catch, ну и не забывайте, что app — это прежде всего eventEmitter. По-моему, это просто гениально. Модулей для Koa уже написано великое множество, почти каждый модуль для Express уже адаптирован для Koa, такие как Mongoose, Passport, request и многие другие. Так мы получили асинхронное программирование, которое приносит радость и фан. К тому же, небезызвестный TJ Holowaychuk остаётся поддерживать Koa.

Спасибо, что читали. Всего хорошего, всем Node.js.