Versuchen Sie, Express + PostgreSQL + Sequelize mit Docker zu erstellen [Teil 2]

Letztes Mal

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

Ja, es wird fortgesetzt.

③ Einstellungen rund um DB

In der Express-Umgebung im Container befindet sich eine Datei mit DB-Einstellungen. Hier werden die Zugriffsinformationen auf die in docker-compose.yml festgelegte Datenbank angegeben.

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
    },
  };

Ich denke, dass Sie auch jetzt noch auf die DB zugreifen können. Werfen wir einen Blick auf index.js in Routen!

Schreiben Sie, wie es sich verhält, wenn Sie mit GET auf 'URL /' zugreifen. Durch vorheriges Lesen von sb_client.js ist es möglich, eine Verbindung zur Datenbank herzustellen.

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 })
     })

Wenn Sie sich jedoch die 6. Zeile ansehen, wird die DB-Verarbeitung von der SQL-Anweisung aufgerufen. Dies ist immer noch gut für das Studium von SQL. Wenn Sie jedoch mehrere Tabellen vorbereiten und Verarbeitungen durchführen, z. B. Beziehungen, die sie verbinden, verwenden Sie ORM, was einfacher ist.

④ Nutzung von ORM

Objektrelationales Mapping (O / RM, ORM) ist eine Programmiertechnik, die inkompatible Daten zwischen einer Datenbank und einer objektorientierten Programmiersprache transformiert. Siehe Wikipedia

Verwenden Sie Sequelize als ORM, wenn Sie Node.js verwenden.

Terminal


# npm install -g sequelize sequelize-cli

# sequelize-cli init

Zu diesem Zeitpunkt werden die Verzeichnisse config.json und model im Arbeitsverzeichnis erstellt.

config

json:./config/config.json


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

Es scheint üblich zu sein, 127.0.0.1 für den Host in config.json anzugeben. Im Fall von Docker wird jedoch zum Zeitpunkt der Migration möglicherweise die Fehlermeldung angezeigt, dass Sie nicht auf die Datenbank zugreifen können. Daher wird der in docker-compose.yml festgelegte DB_HOST (= Datenbank) unverändert verwendet.

Entscheiden Sie, welche Tabellen- und Spalteninformationen vorerst erstellt werden sollen, und erstellen Sie eine Datenbank!

Terminal


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

# sequelize-cli db:migrate

migration

Nach Abschluss der Migration werden die DB-Spalteninformationen im Migrationsordner angezeigt.

javascript:./migration/Datum-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

Nach Abschluss der Migration werden die in Modell eingegebenen DB-Spalteninformationen angezeigt. Wenn Sie dies bestätigen können, ist es abgeschlossen.

javascript:./model/user.js


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

model / index.js und model / user.js, die dieses Mal erstellt wurden, werden durch Beziehungseinstellungen und Assoziationen bearbeitet, aber zu diesem Zeitpunkt gibt es keine Berührung.

Benutzerregistrierung → Benutzeranzeigesequenz

Sie können es einfach mit einer Benutzerregistrierungs-App erstellen.

https://github.com/LostGeneration1999/Express_PostgreSQL_ORM

Aus dem Formular Benutzer: Kyuji Fujikawa wurde eingegeben und angezeigt.

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

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

Referenzartikel

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

Zugriff auf PostgreSQL https://qiita.com/yusuke-ka/items/448843020c0406363ba5

ORM bezogen https://qiita.com/izszzz/items/31d448c501d24d31c846

ORM bezogen https://qiita.com/KoKeCross/items/144949ba03e5138fc6d5

Recommended Posts

Versuchen Sie, Express + PostgreSQL + Sequelize mit Docker zu erstellen [Teil 2]
Versuchen Sie, Express + PostgreSQL + Sequelize mit Docker zu erstellen [Teil 1]
Erstellen einer Rails 6- und PostgreSQL-Umgebung mit Docker
Versuchen Sie, den Cloudera Manager mit Docker auszuführen
Versuchen Sie, PostgreSQL-Arrays mit JDBC zu bearbeiten
So erstellen Sie mit Docker ~ Sequelize ~ eine [TypeScript + Vue + Express + MySQL] -Umgebung
[Docker] Erstellen Sie mit Docker eine Node.js + Express + Webpack-Umgebung
Installieren Sie Docker mit WSL2 Memo ([Teil 2] Docker-Einführung)
Erleben Sie CI / CD mit Katacoda (für Anfänger) - Teil 10 (Erstellen von Docker-Bildern mit Jenkins)
Versuchen Sie, einen anderen Servlet-Container-Steg mit Docker zu verwenden
Rails Docker-Teil 1-
Rails Docker ~ Teil 2 ~
Bis ich versuche, Apache Kafka mit Docker-Image auszuführen
Versuchen Sie, mit Java eine Verbindung zu AzureCosmosDB Emulator for Docker herzustellen
Führen Sie Mosquitto mit Docker aus und versuchen Sie die WebSocket-Kommunikation mit MQTT
Versuchen Sie, Java mit GraalVM in ein natives Modul zu integrieren