Знайомство з n2o v4.4 [3]

Продовжуємо знайомство з n2o - erlang-фреймворком на вебсокетах.

n2o "з коробки" вміє працювати з mnesia та riak,
Проте що нам робити, якщо ми хочемо зберігати/діставати дані в/з postgresql?
Зараз ми це з'ясуємо!

раніше ми уже додали epgsql ( https://github.com/epgsql/epgsql ) в deps,
зараз навчимось працювати з цим erlang-драйвером для postgresql

Наше тестове завдання -
маємо таблицю test.sql з переліком міст
( https://github.com/221V/my_n2o_app/blob/master/apps/my_n2o_app/test.sql ),
нам потрібно зробити функціонал виводу даних,
редагування, видалення та добавлення нових даних.
(для початку реалізуємо вивід та добавлення)

створимо модуль pg.erl
( https://github.com/221V/my_n2o_app/blob/master/apps/my_n2o_app/src/pg.erl ) ,
у якому ми підключимось до субд та пропишемо обгортки для наших запитів та транзакцій
у випадку з підключенням напряму до postgresql - порт 5432,
використовуючи pgBouncer - порт 6432
(не забудьте прописати власні налаштування для підключення до субд - користувач, пароль, назва_бази)

створимо модуль pq.erl
( https://github.com/221V/my_n2o_app/blob/master/apps/my_n2o_app/src/pq.erl ) ,
у якому ми пізніше пропишемо потрібні нам запити до бази даних

в routes.erl ( https://github.com/221V/my_n2o_app/blob/master/apps/my_n2o_app/src/routes.erl )
пропишемо обробник нашої адреси
( https://ваш.домен/testcities/ - це і буде наша сторінка)
та створимо модуль testcities.erl
( https://github.com/221V/my_n2o_app/blob/master/apps/my_n2o_app/src/testcities.erl )

розглянемо як працює цей модуль -

  1. при GET-запиті від браузера сторінки, обробником котрої є даний модуль -
    виконується функція main() - формується сторінка з шаблонів, віддається браузеру

  2. встановлюється websockets-з'єднання,
    виконується функція event(init) -
    в даному випадку ми тут викликаємо іншу функцію - event({client,{sitiesshow}}) ,
    котра дістає з бази даних список міст та додає їх на сторінку

  3. після власне після встановлення websockets-з'єднання ми можемо ганяти дані між браузером і сервером по вебсокетах

(комміт https://github.com/221V/my_n2o_app/commit/8d5e702d92f61e6c30bbecba2b47058f1ec1efc2 )

Продовження

Посилання

https://github.com/epgsql/epgsql