INTRODUCTION: Suivant les Nodejs précédents Hello, World! Nous pouvons également voir d'autres fonctionnalités puissantes. Avec la popularité actuelle de la communauté Nodejs et le soutien d'un grand nombre d'ingénieurs, un grand nombre de modules ont été progressivement introduits.
Contenu: Ce qui suit démontre l'interaction entre NodeJS et MySQL.
Pour le moment, vous devez ajouter le module de MySQL à NodeJS. À l'heure actuelle, le NPM (Node Package Manager) mentionné dans le chapitre précédent a été activé.
Installez le module MySQL dans NodeJS:
La copie de code est la suivante:
$ npm installer mysql
Script js mysqltest.js
La copie de code est la suivante:
// mysqltest.js
// Chargez le module MySQL
var client = require ('mysql'). Client,
client = nouveau client (),
// le nom de la base de données à créer
Test_database = 'nodejs_mysql_test',
// le nom de la table à créer
Test_table = 'test';
//nom d'utilisateur
client.user = 'root';
//mot de passe
client.password = 'root';
// créer une connexion
client.connect ();
client.Query ('Créer une base de données' + test_database, fonction (err) {
if (err && err.number! = client.error_db_create_exists) {
lancer err;
}
});
// Si aucun rappel n'est fourni, des erreurs seront émises comme `'Erreur' '
// Événements du client
client.Query ('use' + test_database);
client.Query (
'Create Table' + test_table +
'(id int (11) auto_increment,' +
'Title Varchar (255),' +
'texte texte,' +
«Création de DateTime» +
'Clé primaire (id))'
));
client.Query (
'Insérer dans' + test_table + '' +
'Set title =?, Text = ?, Created =?',
[«Super Cool», «Ceci est un beau texte», «2010-08-16 10:00:23»]
));
var query = client.query (
'Insérer dans' + test_table + '' +
'Set title =?, Text = ?, Created =?',
[«une autre entrée», «parce que 2 entrées font un meilleur test», «2010-08-16 12:42:15»]
));
client.Query (
'Select * from' + test_table,
fonction selectcb (err, résultats, champs) {
if (err) {
lancer err;
}
console.log (résultats);
console.log (champs);
client.end ();
}
));
Exécuter les scripts
La copie de code est la suivante:
node mysqltest.js
Les effets sont les suivants:
// mysql-demo.js
const mysql = requis ('mysql2 / promesse'); // utilise mysql2 qui prend en charge la promesse
require ('dotenv'). config (); // Gestion des variables d'environnement
// Utiliser le pool de connexions pour améliorer les performances
const pool = mysql.createpool ({{
hôte: process.env.db_host || 'localhost',
Utilisateur: process.env.db_user || 'racine',
Mot de passe: process.env.db_password || 'racine',
base de données: process.env.db_name || 'nodejs_mysql_test',
WaitForConnections: vrai,
ConnectionLimit: 10,
queuelimit: 0
});
// Définition de la structure du tableau (gestion DDL)
const table_schema = `
Créer une table s'il n'existe pas de messages (
id int key primaire auto_increment,
Titre Varchar (255) pas nul,
Texte de contenu,
Created_at DateTime par défaut Current_timestamp,
Updated_at datetime sur mise à jour actuel_timestamp
) Moteur = innodb charset par défaut = utf8mb4 collate = utf8mb4_unicode_ci;
`;
// Encapsulation logique commerciale
classe postdao {
constructeur (pool) {
this.pool = pool;
}
async initialize () {
attendez this.pool.execute (table_schema);
console.log ('table vérifié / créé');
}
Async CreatePost (post) {
const [result] = attendre this.pool.execute (
`Insérer dans les publications (titre, contenu)
Valeurs (?,?) `,
[post.title, post.Content]
));
return {... post, id: result.insertid};
}
Async getPosts (page = 1, pagesize = 10) {
const offset = (page - 1) * pagesize;
const [lignes] = attendre this.pool.execute (
`Sélectionner * dans les messages
Ordre par création_at Desc
Limiter? Offset? `,
[PageSize, Offset]
));
retour des lignes;
}
async transactiondemo () {
const Conn = attendre this.pool.getConnection ();
essayer {
attendre conn.begintransaction ();
// Opération de transaction 1
attendre conn.exécute (
`Insérer dans les publications (titre, contenu)
Valeurs (?,?) `,
[«Transaction 1», «Demo de l'opération atomique»]
));
// Opération de transaction 2
const [result] = attendre conn.excute (
`Mettre à jour les articles se définir le contenu =?
Où titre =? `,
[«Contenu mis à jour», «Transaction 1»]
));
attendre Conn.Commit ();
Résultat de retour;
} catch (err) {
attendre Conn.rollback ();
lancer err;
} enfin {
Conn.release ();
}
}
}
// Exemple d'exécution
(async () => {
essayer {
const dao = new postdao (pool);
attendre dao.initialize ();
// Créer un nouvel article
const newpost = attendre dao.createost ({{
Titre: «Guide moderne Node.js MySQL»,
Contenu: «meilleures pratiques pour les opérations de base de données»
});
Console.log ('Créé Post:', newPost);
// Requête de pagination
const Posts = attendre dao.getPosts ();
Console.log ('Résultats de la première page:', Posts);
// Demo de transaction
const txResult = attendre dao.transactiondemo ();
Console.log ('Transaction terminée:', TxResult);
// Requête finale
const finalPosts = attendre dao.getPosts ();
Console.log ('Posts finaux:', FinalPosts);
} catch (err) {
Console.Error ('Erreur d'application:', err);
} enfin {
Awaiter pool.end ();
}
}) ();