Дикий Григорий

Full-stack веб-разработчик

API на Node.JS: Sequelize. Часть 3

При разработке приложений перед архитектором стоит вопрос о выборе способа хранения данных. Как правило это базы данных. На данный момент наиболее известны SQL и NoSQL базы данных. В мире Node.JS преобладает NoSQL решения, такие как MongoDB, но все же они обладают некоторыми недостатками и не позволяют в полной мере создать сложные приложения. Но можно посредством Sequelize работать с реляционными базами данных посредством ORM. Данное решение существенно упрощает жизнь программистам. Установим данное решение:

npm install sequelize@3.19.2 sqlite3@3.1.1 --save

Данная команда установит нам пакет для работы с базой данных. Теперь создадим файл конфигурации который будет хранить основные данные в папке libs под названием config.js:

module.exports = {
  database: "task",
  username: "",
  password: "",
  params: {
    dialect: "sqlite",
    storage: "task.sqlite",
    define: {
      underscored: true
    }
  }
};

Рассмотрим данные поля подробнее:

  • database: определяет имя базы данных
  • username: имя пользователя, который имеет доступ к бд
  • password: пароль, пользователя
  • params.dialect: определяет тип базы данных (mysql, sqlite, postgres, mariadb, mssql)
  • params.storage: атрибут который позволяет определить имя файла базы данных (актуален для sqlite)
  • params.define.underscored: поля базы данных в нижнем регистре

Для работы с базой данных создадим файл db.js в корневой директории и заполним следующим содержимым:

import Sequelize from "sequelize";
const config = require("./libs/config.js");
let sequelize = null;
module.exports = () => {
  if (!sequelize) {
    sequelize = new Sequelize(
      config.database,
      config.username,
      config.password,
      config.params
    );
  }
  return sequelize;
};

Для того, чтобы соединение с базой данных происходило при запуске приложения нужно данный файл включить первым в index.js посредством cosign:

import express from "express";
import consign from "consign";
const app = express();
consign()
  .include("db.js")
  .then("models")
  .then("libs/middlewares.js")
  .then("routes")
  .then("libs/boot.js")
  .into(app);

Для того, чтобы соединение происходило каждый раз при запуске нашего приложения нужно подправить файл boot.js:

module.exports = app => {
  app.db.sync().done(() => {
    app.listen(app.get("port"), () => console.log(`Task API - Port ${app.get("port")}`));
  });
};

В итоге приложение запустится только тогда, когда произойдет соединение с базой данных.

Ссылка на github: https://github.com/dikiigr/nodejs-api