Koa - это веб-фреймворк для Node.js. С выпуском KOA 2.0 теперь мы можем использовать асинхронные функции ES2017 для выражения нашего промежуточного программного обеспечения с помощью KOA. KOA не поставляется в комплекте с каким-либо промежуточным программным обеспечением, но довольно много пакетов доступно в npm.

Требования

У нас должна быть версия узла 7.6.0 или выше. Вы можете использовать диспетчер версий узлов n, чтобы обновить узел до версии, подходящей для KOA.

$ n 7.6.0

Установка

Во-первых, давайте создадим каталог для проекта.

$ mkdir testApp

Затем давайте инициализируем этот проект package.json файлом, запустив

$ cd testApp
$ npm init

Мы можем установить KOA с помощью диспетчера пакетов узлов. Мы также будем использовать пакеты промежуточного слоя koa-mount и koa-router.

 $ npm install koa koa-mount koa-router --save

Состав

Далее давайте создадим следующую структуру проекта

testApp
|______router
|      |______car.js
|______server.js
|______package.json

Сервер

В файле server.js нам сначала потребуются пакеты.

const Koa = require('koa');
const router = require('koa-router')();
const mount = require('koa-mount');

Затем нам нужно создать экземпляр объекта Koa, а затем смонтировать файлы нашего маршрутизатора.

const app = new Koa();
app.use(mount(require('./router/car.js')));

Затем нам нужно прослушать порт для запуска приложения.

if(require.main === module) {
     app.listen(3000); // default
}

Собрав их все вместе, наш файл server.js будет выглядеть так.

// require packages
const Koa = require('koa');
const router = require('koa-router')();
const mount = require('koa-mount');
// create an instance of the Koa object
const app = new Koa();
// mount the route
app.use(mount(require('./router/car.js')));
app.use(router.routes()); // route middleware
if(require.main === module) {
     app.listen(3000); // default
}

Маршруты

В каталоге маршрутов давайте создадим конечные точки нашего API. Мы можем сделать это, создав еще один объект KOA и экспортировав его как мини-сервер.

В car.js

const Koa = require('koa');
const router = require('koa-router')();
const app = new Koa();
// a simple car object that we can serve
const car = {
   make: 'Honda'
   year: '2012'
   model: 'Civic'
};

Затем давайте создадим конечную точку, которая может обслуживать наш объект car для запроса GET.

router.get('/car', async (ctx, next) => {
    ctx.body = car;
    await next();
});

Затем нам нужно экспортировать наш мини-сервер, чтобы он мог работать на порту 3000.

Наши файлы car.j будут выглядеть так:

const Koa = require('koa');
const router = require('koa-router')();
const app = new Koa();
// a simple car object that we can serve
const car = {
   make: 'Honda'
   year: '2012'
   model: 'Civic'
};
// Route to handle GET request
router.get('/car', async (ctx, next) => {
    ctx.body = car;
    await next();
});
app.use(router.routes()); // route middleware
module.exports = app;

Вот и все!!

Таким образом, с помощью KOA 2.0 мы сможем сохранить наш backend API организованным и простым.

Источники:

КоАйс, коа-роутер, коа-маунт