https://qiita.com/rockguitar67/items/b644a63b3e39cc1fcaea
Ja, es wird fortgesetzt.
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.
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.
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.
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