https://qiita.com/rockguitar67/items/b644a63b3e39cc1fcaea
Oui, c'est continué.
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.
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.
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é.
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