Skip to content

Instantly share code, notes, and snippets.

@RamEduard
Last active April 21, 2024 22:32
Show Gist options
  • Save RamEduard/075684b4e96ded357d051e2d3100fa21 to your computer and use it in GitHub Desktop.
Save RamEduard/075684b4e96ded357d051e2d3100fa21 to your computer and use it in GitHub Desktop.
Usar Postgres en tu REST API de Node.js

Cómo usar Postgress en tu REST API de Node.js

Pasos

Paso 1: Instalar paquetes

$ npm install pg pg-hstore

Desinstalar sqlite3

$ npm remove sqlite3 --save

Paso 2: Actualizar src/config/sequelize.json

{
  "development": {
    "dialect": "postgres",
    "database": "expenses-rest-api-development",
    "host": "localhost",
    "username": "postgres",
    "password": "postgres"
  }
}

Paso 3: Actualizar relaciones Category y Record

Es necesario para evitar errores en los queries SQL de postgres las siguientes actualizaciones en los modelos:

src/models/category.js

"use strict";
const { Model } = require("sequelize");
module.exports = (sequelize, DataTypes) => {
  class Category extends Model {
    static associate(models) {
      models.Category.hasMany(models.Record, {
        as: "records",
        foreignKey: 'categoryId'
      })
    }
  }
  Category.init(
    {
      name: {
        allowNull: false,
        type: DataTypes.STRING,
      },
      type: {
        allowNull: false,
        type: DataTypes.STRING,
      },
    },
    {
      sequelize,
      modelName: "Category",
      tableName: "categories",
    }
  );
  return Category;
};

src/models/record.js

"use strict";
const { Model } = require("sequelize");
module.exports = (sequelize, DataTypes) => {
  class Record extends Model {
    static associate(models) {
      models.Record.belongsTo(models.Category, {
        as: "category",
        foreignKey: 'categoryId'
      });
    }
  }
  Record.init(
    {
      amount: DataTypes.FLOAT,
      categoryId: {
        type: DataTypes.INTEGER,
        allowNull:false,
        references:{
          model: 'categories',
          key: 'id'
        }
      },
      date: DataTypes.DATE,
      name: {
        allowNull: false,
        type: DataTypes.STRING,
      },
      type: {
        allowNull: false,
        type: DataTypes.STRING,
      },
      deleted: {
        defaultValue: false,
        type: DataTypes.BOOLEAN,
      },
    },
    {
      sequelize,
      modelName: "Record",
      tableName: "records",
    }
  );
  return Record;
};

Paso 4: Postgres - Docker

Te recomiendo iniciar un nuevo contenedor de postgres para probar tu configuración.

$ docker run --name postgres -p 5432:5432 -e POSTGRES_PASSWORD=postgres -d postgres

Paso 5: Iniciar tu aplicación

Ahora puedes probar la nueva configuración con el comando npm run dev.

Opción Docker

$ docker build -t node-expenses-rest-api:latest .

$ docker run --name node-expenses-rest-api -p 3000:3000 -d node-expenses-rest-api

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment