Skip to content
This repository was archived by the owner on Mar 2, 2025. It is now read-only.

index.js

do- edited this page Dec 30, 2019 · 9 revisions

Пусть точкой входа для знакомства с кодом приложения будет тот файл, который непосредственно подаётся node на запуск. Называется он, как принято в node-приложениях, index.js.

Как нетрудно убедиться, его действие сводится к:

  • чтению конфигурации;
  • построению модели данных с автоматической миграцией предоставленной БД;
  • запуску процесса прослушивания, где для каждого входящего HTTP-запроса:
    • определяется подходящий класс обработчика:
      • либо WebUiBackend: обработчик динамических запросов (реализация бизнес-логики);
      • либо Web-сервер EluStatic для выдачи фиксированного набора HTML/js/css;
      • ...здесь можно добавить какие-либо ещё классы обработчиков для HTTP: например, адаптеры для запросов SOAP- или каких-то ещё Web-сервисов;
    • создаётся соответствующий объект и вызывается его метод run;
На этом же уровне могут запускаться процессы прослушивания для других каналов поступления запросов, в том числе не связанных с HTTP. В частности, подключение к механизму LISTEN / NOTIFY PostgreSQL:
  this.pools.db.listen ({        
    name    : 'dia',        	
    handler : Async,
    params  : {conf: this, pools: this.pools}
  })

Это позволяет запускать в обработку на стороне node.js запросы, инициированные триггерными процедурами. Даже если изменения данных инициируются не Dia-приложением, а какими-либо сторонними процессами:

  after_update: `        
    IF NEW.size = NEW.uploaded AND OLD.size <> OLD.uploaded THEN
      PERFORM pg_notify (
        'dia', 
        '{"type":"my_type","action":"process","id":"' || NEW.uuid || '"}'
      );
    END IF;
    RETURN NEW;
  `,

Clone this wiki locally