Nodejs: Mysql ,create,insert ,update...

Les étapes à suivre

  1. 1Installer une SGBD mysql et démarer le service mysql
  2. 3Installer le module mysql.js
  3. 4Installer le module Nodemon
  4. 5Créer le fichier CreerDBandTables.js
  5. 6Lancer le projet
  6. 7mysql La commande insert
  7. 8mysql La commande select
  8. 9mysql La commande delete
  9. 10mysql La commande update

1.Installer un SGBD mysql et démarer le service mysql

Télécharger mysql SGBD ,Dans ce tp on utilise Xampp server https://www.apachefriends.org/fr/download.html
mais vous pouvez utilsé n'importe quelle SGBD mysql

2.Installer le module mysql

Un projet nodeJs utilise plusieurs bibiothèque javasript nommées modules
Afin de travailer avec mysql on doit installer le module mysql

npm install mysql2 --save

3.Installer le module Nodemon

Nodemon est un outil qui aide à développer des applications basées sur node.js en redémarrant automatiquement l'application de nodejs lorsqu'il detetecte des modifications dans le projet

npm install nodemon -g

4.Créer le fichier CreerDBandTables.js

/*Importer le module mysql qui permet de gérer les transaction dans une base de données mysql */
var mysql = require('mysql2');

//créer une connexion à la base de données
var con = mysql.createConnection({
host: "localhost", /*le serveur de la base de données*/
user: "root", /*Utilisateur de la base de données*/
password: "",/*le mot de passe de l'utilisateur de la base de données*/
port: "3306", /*le serveur de la base de données*/
});

/*Créer la base de données */
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
con.query("CREATE DATABASE if not exists DatabaseTest", function (err, result) {
if (err) throw err;
/*se connecter à la base de données crée puis créer les tables */
var con = mysql.createConnection({
host: "localhost", /*le serveur de la base de données*/
user: "root", /*Utilisateur de la base de données*/
password: "",/*le mot de passe de l'utilisateur de la base de données*/
port: "3306", /*le serveur de la base de données*/
database: "DatabaseTest" /*le nom de la base de données à Créer manullement*/
});

//se connecter en utlisant con crée
con.connect(function(err) {
/*err:contient error de connexion*/
/*afficher erreur de connexion s'il existe*/
if (err) throw err;
/*pas d'erreur donc on peut exécuter des requête sql */
/*Créer la table produit */
var sql = "CREATE TABLE test(id int primary key auto_increment,nom varchar(25))";
/*Exécuter la requete sql crée*/
con.query(sql, function (err, result) {
if (err) throw err;
console.log("Table Test est crée");
});
});
});
});

5.Lancer le projet

nodemon CreerDBandTables.js

SQL Commandes :insert,select,update,delete...

à l'aide du module mysql on peut exécuter n'importe quelle requête sql avec nodejs

Configuration de la connexion à la base de données :config.js

Création du fichier de configuration pour se connecter à la base de données afin d'éxécuter des requêtes SQL

let config = {
host :'localhost',
user :'root',
password :'',
database :'DatabaseTest'
};
module.exports = config;

Mysql+pug+Express

Add new Test

db/CrudTestModel.js

let mysql = require('mysql2');
let config = require('./config.js');
let connection = mysql.createConnection(config);
var CrudTestModel={};
//fonction insert
CrudTestModel.insert=function(nom,results)
{
    let sql = 'INSERT INTO test(nom) VALUES("'+nom+'")';
    connection.query(sql, function (err, result) {
        if (err) {
            results(true,null)
        }
        else
        {
            results(null,true)
        }
    });
   
}


module.exports=CrudTestModel;


Serveur.js

 //importer expressjs
 var express = require('express');
 var app = express();
 var cookieParser = require('cookie-parser');
 const bodyParser = require('body-parser');
 app.use(bodyParser.urlencoded({ extended: true }))
 // parse requests => application/json
 app.use(bodyParser.json())
 var CrudTestModel=require('./db/CrudTestModule.js')  
 app.use(cookieParser());  
 app.set('views', './views');
 app.set('view engine', 'pug');
 var textLinks=["Ajouter","Afficher","Supprimer","Modifier"]    ;
 var message="";
 
 //afficher le formulaire
 app.get("/test/add",(req,res)=>{
    res.render("addTest",{})
})

//récuppérer les données from the form
app.post("/test/add",(req,res)=>{
    if((req.body.nom!=undefined) && (req.body.nom!=''))
    {
        CrudTestModel.insert(req.body.nom,(error,data)=>{
            if(error){
                message="Erreur";
            }
            else
            {
                message="Test est bien ajouté";
            }
        })
    }
    else
    {
        message="Erreur tout les champs sont obligatoires";
       
    }
    res.render("addTest",{message})
});

//démarer le serveur sur le port 8081
app.listen(8081, function () {
    console.log('Écoute du port 8081');
});

views/nav.pug

nav(style="background:#eee;")
    ul
        li(style="display:inline;margin:10px;")
            a(href="/test/add") Add
        li(style="display:inline;margin:10px;")
            a(href="/test/") List

views/addTest.pug

html
    head
        title add new Test
    body
        include nav.pug
        form(action="/test/add" method="post")
            fieldset
                legend Add new Test
                table
                    tr
                        td Nom
                        td
                            input(type="text" required="required" name="nom")
                    tr
                        td
                            input(type="submit" value="Add")
h1=message

List Test

db/CrudTestModel.js

Ajouter la fontion select

CrudTestModel.select=function(results)
{
    connection.query("select * from test",function(err,result)
    {
        if(err)
        {
            results(true,null)
        }
        else
        {
            results(null,result)
        }
    })
}

Serveur.js

Ajouter la route /test/

app.get("/test/",(req,res)=>{
    CrudTestModel.select((error,data)=>{
        if(error)
        {
            message="Error SQL";
            res.render("listTest",{message})
        }
        else
        {
        res.render("listTest",{data})
        }
    })
})

view/listTest.pug

Créer la vue listTest.pug

html
    head
        title Test list
    body
        include nav.pug
        table(style="width:100%")
            thead(style="width:100%;background:#ddd;")
                th Id
                th Nom
            tbody(style="width:100%")
                each line,index in data
                    tr(style="width:100%;text-align:center;")
                        td=line.id
                        td=line.nom

Supprimer

view/listTest.pug

html
    head
        title Test list
    body
        include nav.pug
        table(style="width:100%")
            thead(style="width:100%;background:#ddd;")
                th Id
                th Nom
                th Actions
            tbody(style="width:100%")
                each line,index in data
                    tr(style="width:100%;text-align:center;")
                        td(style="border:1px solid #000;")=line.id
                        td(style="border:1px solid #000;")=line.nom
                        td(style="border:1px solid #000;")
                            a(href='/test/delete/'+line.id, style="background:red;margin:2px;color:#000;padding:2px;") Delete
                            a(href='/test/update/'+line.id, style="background:cyan;margin:2px;color:#000;padding:2px;") Update

h1=message

db/CrudTestModel.js

Ajouter la fontion delete

CrudTestModel.delete=function(id,results)
{
    connection.query("delete from test where id=?", [id], function (err, result) {
        if(err)
        {
            results(true,null)
        }
        else
        {
            results(null,true)
        }
    });
}

Serveur.js

Ajouter la route /delete/:id


app.get('/test/delete/:id',(req,res)=>{
    if(req.params.id!=undefined && req.params.id!='')
    {
        CrudTestModel.delete(req.params.id,(error,data)=>{
            if(error)
            {
                message="Erreur de suppression";
            }
            else
            {
                message="le Test est bien supprimé";
            }
        })  
    }
    else
    {
        deleteMessage="Erreur de suppression id est obligatoires";
        deleteStatus=false;
    }  
   
    //redirect vers l'affichage
    res.redirect("/test/")
})





Exemples:a.Mysql:insert

Insérer des lignes dans la table test(id,nom) deja crée

On a plusieurs méthode pour insérer des données dans une table à l'aide du module myql

1.Insert une seule ligne insert1ligne.js
let mysql = require('mysql2');
let config = require('./config.js');
/*créer une connexion à la base de données à l'aide de la configuration crée dans le fichier config.js */
let connection = mysql.createConnection(config);

/**1**/
/*une requête sql insert */
let sql = 'INSERT INTO test(id,nom) VALUES(1,"le test 1")';
// executer la requêts sql
connection.query(sql, function (err, result) {
if (err) {
return console.error(err.message);
}
/*result.insertId:retourne l'id de la ligne inséré*/
console.log("Bien insérer id="+result.insertId);
});


/***2 ***/
/*Id est auto_incrment dans on peut ne pas le saisir */
sql = 'INSERT INTO test(nom) VALUES("le test 2")';
connection.query(sql, function (err, result) {
if (err) {
return console.error(err.message);
}
console.log("Bien insérer id="+result.insertId);
});

/*Fermer la connexion */
connection.end();

Exécution:

node insert1ligne.js
Résultats:
Duplicate entry '1' for key 'PRIMARY' Erreur =>INSERT INTO test(id,nom) VALUES(1,"le test 1")
Bien insérer id=3

2.Inérer plusieurs lignes dans la table test insertPlusieurs.js

let mysql = require('mysql2');
let config = require('./config.js');
let connection = mysql.createConnection(config);

/**La méthode 1**/
let sql = 'INSERT INTO test(id,nom) VALUES ?';
/*tableau des valeurs à insérées */
var values = [
[5, 'le test 5'],
[6, 'Le test 6']
];

/*Exécuter la requête SQL en passant le tableau des valeur*/
connection.query(sql,[values], function (err, result) {
if (err) {
return console.error(err.message);
}
/*result.insertId:retourne l'id de la ligne inséré*/
console.log("Bien insérer id="+result.insertId);
});

/*Fermer la connexion */
connection.end();

a.Mysql:select

Afficher le contenu de la table test

-Select sans Where selectSansWhere.js

let mysql = require('mysql2');
let config = require('./config.js');
let connection = mysql.createConnection(config);

/*SQL select */
let sql = 'select id,nom from test';

// executer la requêts sql
connection.query(sql, function (err, result, fields) {
/*
**1
err:contient les erreurs si on a

**2
result:contient le result de select
result[1].id=>retourne la valeur de l'id du premier enregistrement
result[3].nom=>retourne la valeur du nom du troisième enregistrement

**3
fields:contient les informations (structure de chaque colonne dans select )
exmple:
fields[1]=>retoune les informations su le nom
{
catalog: 'def',
db: 'DatabaseTests',
table: 'test',
orgTable: 'test',
name: 'nom',
orgName: 'nom',
charsetNr: 33,
length: 765,
type: 253,
.....
}
*/
if (err) {
return console.error(err.message);
}

console.log(result);
});

/*Fermer la connexion */
connection.end();

Exécution:

node selectSansWhere.js

Résultats:

[
{ id: 1, nom: 'le test 1' },
{ id: 2, nom: 'le test 2' },
{ id: 3, nom: 'le test 2' },
{ id: 5, nom: 'le test 5' },
{ id: 6, nom: 'Le test 6' }
]

-Select avec Where selectAvecWhere.js

let mysql = require('mysql2');
let config = require('./config.js');
let connection = mysql.createConnection(config);

/*SQL select avec Where */
var sql = 'SELECT * FROM test WHERE id = ? OR nom LIKE ?';
var id=1;
var nom="test";
/*Exécuter la requête SQL en passant un tableau de valeur pour id et nom */
connection.query(sql, [id, "%"+nom+"%"], function (err, result) {
if (err) {
return console.error(err.message);
}
console.log(result);
});

/*Fermer la connexion */
connection.end();

Exécution:

node selectAvecWhere.js

Résultats:

[
{ id: 1, nom: 'le test 1' },
{ id: 2, nom: 'le test 2' },
{ id: 3, nom: 'le test 2' },
{ id: 5, nom: 'le test 5' },
{ id: 6, nom: 'Le test 6' }
]

-Mysql Delete Delete.js

let mysql = require('mysql2');
let config = require('./config.js');
let connection = mysql.createConnection(config);

/*Delete SQL Commande*/
var sql = 'Delete FROM test WHERE id = ?';
var id=1;
/*Exécuter la requête SQL en passant la valeur de id=?*/
connection.query(sql, id, function (err, result) {
if (err) {
return console.error(err.message);
}
/*result.affectedRows :retourne le nombre de ligne supprimées */
console.log(result.affectedRows);
});

/*Fermer la connexion */
connection.end();

Exécution:

node delete.js

Résultats:

1

-Mysql Update update.js

let mysql = require('mysql2');
let config = require('./config.js');
let connection = mysql.createConnection(config);

/*Upate SQL Commande*/
var sql = 'update test set nom=? WHERE id =?';
var id=2;
var nom="test modifié";
/*Exécuter la requête SQL en passant la valeur de id=?*/
connection.query(sql, [nom,id], function (err, result) {
if (err) {
return console.error(err.message);
}
/*result.affectedRows :retourne le nombre de ligne supprimées */
console.log(result.affectedRows);
});

/*Fermer la connexion */
connection.end();

Exécution:

node update.js

Résultats:

1











Cours et TPs