Essayez de créer Express + PostgreSQL + Sequelize avec Docker [Partie 2]

Dernière fois

https://qiita.com/rockguitar67/items/b644a63b3e39cc1fcaea

Oui, c'est continué.

③ Paramètres autour de DB

Il existe un fichier avec les paramètres de base de données dans l'environnement Express à l'intérieur du conteneur. Ici, les informations d'accès au jeu de bases de données dans docker-compose.yml sont spécifiées.

db_client.js


module.exports = {
    pg_client: function () {
        const { Client } = require('pg')

        const client = new Client({
            user: process.env.DB_USER,
            host: process.env.DB_HOST,
            port: process.env.DB_PORT,
            database: process.env.DB_NAME
        })
        return client
    },
  };

Je pense que vous pouvez toujours accéder à la DB même à l'heure actuelle. Jetons un coup d'œil à index.js dans les routes!

Ecrivez comment il se comporte lorsque vous accédez à l'URL / avec GET. En lisant sb_client.js plus tôt, il est possible de se connecter à la base de données.

routes/index.js


router.get('/', function (req, res, next) {
  const client = require("../db_client").pg_client()

  client.connect()
     .then(() => console.log("success!!"))
     .then(() => client.query("select * from chat order by timestamp desc"))
     .then(function (results) {
      console.table(results.rows)
       res.render('index', { result: results.rows })
     })

Cependant, si vous regardez la 6ème ligne, le traitement DB est appelé par une instruction SQL. C'est toujours bon pour étudier SQL, mais si vous préparez plusieurs tables et effectuez des traitements tels que les relations qui les relient, utilisez ORM, ce qui est plus facile.

④ Utilisation de l'ORM

Le mapping objet-relationnel (O / RM, ORM) est une technique de programmation qui transforme des données incompatibles entre une base de données et un langage de programmation orienté objet. Voir wikipedia

Utilisez Sequelize comme ORM lorsque vous utilisez Node.js.

Terminal


# npm install -g sequelize sequelize-cli

# sequelize-cli init

À ce stade, les répertoires config.json et model seront créés dans le répertoire de travail.

config

json:./config/config.json


{
  "development": {
    "username": "postgres",
    "password": null,
    "database": "mydatabase",
    "host": "database",
    "dialect": "postgres",
    "operatorsAliases": false
  },

Il semble qu'il soit courant de spécifier 127.0.0.1 pour l'hôte dans config.json, mais dans le cas de Docker, au moment de la migration, vous pouvez obtenir une erreur indiquant que vous ne pouvez pas accéder à la base de données. Par conséquent, DB_HOST (= base de données) défini dans docker-compose.yml est utilisé tel quel.

Décidez des informations de table et de colonne à créer pour le moment et créez une base de données!

Terminal


# sequelize-cli model:generate --name user --attributes firstName:string,lastName:string,email:string

# sequelize-cli db:migrate

migration

Une fois la migration terminée, les informations de la colonne DB seront affichées dans le dossier de migration.

javascript:./migration/Date-create-user.js


module.exports = {
  up: async (queryInterface, Sequelize) => {
    await queryInterface.createTable('users', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      firstName: {
        type: Sequelize.STRING
      },
      lastName: {
        type: Sequelize.STRING
      },
      email: {
        type: Sequelize.STRING
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE
      }
    });
  },
  down: async (queryInterface, Sequelize) => {
    await queryInterface.dropTable('users');
  }
};

model

Une fois la migration terminée, les informations de colonne de base de données saisies dans Model seront affichées. Si vous pouvez le confirmer, c'est terminé.

javascript:./model/user.js


user.init({
    firstName: DataTypes.STRING,
    lastName: DataTypes.STRING,
    email: DataTypes.STRING
  }, {
    sequelize,
    modelName: 'user',
  });

model / index.js et model / user.js créés cette fois sont modifiés par les paramètres de relation et les associations, mais à ce stade, il n'y a pas de contact.

Enregistrement de l'utilisateur → Séquence d'affichage de l'utilisateur

Vous pouvez facilement le créer avec une application d'enregistrement d'utilisateur.

https://github.com/LostGeneration1999/Express_PostgreSQL_ORM

À partir du formulaire Utilisateur: Kyuji Fujikawa a été saisi et affiché.

スクリーンショット 2020-09-22 18.04.27.png

スクリーンショット 2020-09-22 18.04.41.png

Article de référence

https://qiita.com/markusveeyola/items/64875c9507d5fa32884e

Accès à PostgreSQL https://qiita.com/yusuke-ka/items/448843020c0406363ba5

Lié à l'ORM https://qiita.com/izszzz/items/31d448c501d24d31c846

Lié à l'ORM https://qiita.com/KoKeCross/items/144949ba03e5138fc6d5

Recommended Posts

Essayez de créer Express + PostgreSQL + Sequelize avec Docker [Partie 2]
Essayez de créer Express + PostgreSQL + Sequelize avec Docker [Partie 1]
Construction de Rails 6 et environnement PostgreSQL avec Docker
Essayez d'exécuter cloudera manager avec docker
Essayez de manipuler les tableaux PostgreSQL avec JDBC
Comment créer un environnement [TypeScript + Vue + Express + MySQL] avec Docker ~ Sequelize ~
[Docker] Créez un environnement Node.js + express + webpack avec Docker
Installer Docker avec WSL2 Memo ([Partie 2] Introduction à Docker)
Expérience CI / CD avec katacoda (pour les débutants) --Partie10 (Création d'images Docker à l'aide de Jenkins)
Essayez d'utiliser un autre conteneur de servlet Jetty avec Docker
Rails Docker-Partie 1-
Rails Docker ~ Partie 2 ~
Jusqu'à ce que j'essaye d'exécuter Apache Kafka avec une image docker
Essayez de vous connecter à l'émulateur AzureCosmosDB pour Docker avec Java
Exécutez Mosquitto avec Docker et essayez la communication WebSocket avec MQTT
Essayez de créer Java dans un module natif avec GraalVM