Модуль

Модули (основные составляющие приложения) могут быть извлечены или добавлены в приложение без сбоев в системе.

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

Давайте создадим наш первый модуль

Первый модуль, который мы создадим, это «users». Для этого нам нужно пойти в "src/modules" папку и создать там директорию "users".

Потом нам нужно создать необходимые для модуля файлы:index.js и config.json.

index.js это системная оболочка модуля. Минимальный необходимый код внутри должен выглядеть так:

module.exports = ({ ACTIONS, ROUTER, utils }) => {};

Так мы пробросим ACTIONS, ROUTER и прочие компоненты системы внутрь нашего модуля.

Также в index файл мы можем импортировать наш файл конфига:

const { routes } = require('./config.json');

Как вы видите - мы импортировали ключ routes. Давайте наполним наш конфиг роутами:

{
  "name": "users",
  "version": "0.0.1",
  "routes": {
    "users_auth": { "path": "users/auth", "method": "get" }
  }
}

Теперь нам нужно передать наши роуты из конфига в ROUTER и трансформировать имя роута в валидный ACTIONS ивент.

const { routes } = require('./config.json');

module.exports = ({ ACTIONS, ROUTER, utils }) => {
    ROUTER.set('routes', routes); // add module routes to global routes store

    const { users_auth } = utils.convertkeysToDots(routes); // get valid ACTIONS event name
};

Теперь мы готовы обработать запрос от клиента по заданному роуту.

const { routes } = require('./config.json');

module.exports = ({ ACTIONS, ROUTER, utils }) => {
    ROUTER.set('routes', routes);

    const { users_auth } = utils.convertkeysToDots(routes); // get valid ACTIONS event name

    ACTIONS.on(users_auth, ({ headers, params, query, body }) => {
      return (body.name) ?
        Promise.resolve({ status: 'success' }) :
        Promise.reject({ error: { message: 'user name not exist!' } });
    });
};

Выглядит круто. Но наш модуль всё ещё отделён от всего приложения.

Мы можем присоединить его к ядру просто добавив массив в export в файл "src/modules/index.js"

const USERS = require('./users/index'); // require index file from our module

module.exports = () => [
  USERS, // export our module for connect it to core 
];

Last updated