Node JS – MySQL

Introduction

Si vous ne savez pas ni installer ni ce que sont Node JS et ExpressJS référez-vous à l’article « Node JS – ExpressJS ».

 

Installation de la dépendance MySQL

Tout d’abord placez vous à la racine de votre projet, ouvrez le terminal et lancez cette commande :

npm install mysql –save

 

Lancez également :

npm install multer –save

 

Mise en place de la base de données

A titre personnel, j’utilise EasyPhp et PhpMyAdmin, après libre à vous d’utiliser ce que bon vous semble.

Créez une base appelée « NodeJSTuto », si vous changez de nom faites bien attention lorsque nous configurerons sur le script node de bien changer le nom de la base par le nom que vous aurez choisi.

Ajoutez une table « movies » dans lequel vous ajouterez les champs : id, title, réalisateur et genre, après libre à vous d’en ajouter si vous le souhaitez. Faites bien attention que votre id soit en AI (Auto-incrémente), c’est fortement recommandé.

Notre base de données est prête, il ne nous reste plus qu’à ajouter des films et à l’utiliser avec notre script !

Configuration de notre script

Afin de nous connecter à la base de données, il va nous falloir ajouter à notre script les informations de connexion de celle-ci :

// Init mysql and the database

var mysql = require('mysql');

var con = mysql.createConnection({

host: "localhost",

user: "root",

password: "",

database: "NodeJSTuto"

});

Ici, vous appelons la dépendance MySQL que l’ont a installé, et on ajoute les paramètres de connexion.

A partir de là, nous pouvons effectuer des requêtes GET sur notre base, mais on va prendre de l’avance, pour par exemple effectuer un POST ou un DELETE. On va utiliser les dépendances que je vous ai fait installer précédemment :

// Init Form-data

app.set('view engine', 'pug');

app.set('views', './views');

// for parsing multipart/form-data

app.use(upload.array());

app.use(express.static('public'));

Nous allons passer les paramètres de nos requêtes en Form-data. Nous allons enfin pouvoir essayer de récupérer les films que l’ont a ajouté dans notre BDD.

 

Requêtes

GET

La dépendance MySQL est assez basique, il en existe d’autres, ici on écrit les requêtes entièrement à la main. Par exemple :

"SELECT * FROM movies"

 

Donc pour une requête avec la dépendance on écrira :

con.query("SELECT * FROM movies", function (err, result, fields) {

if (err) throw err;

console.log(result);

});

 

« err », « result » et « fields » sont des paramètres qui seront rempli et utilisable après que la requêtes se soit effectué.

  • err : Sera à null si la requêtes s’est bien passée, sinon contiendra les détails de l’erreur.
  • result : contient le résultat de la requête si tout s’est bien passé
  • fields : contient les détails des champs (ex : id, title, réalisateur et genre dans notre cas)

On vérifie d’abord si la requête s’est bien effectuée, si c’est le cas on passe à la suite, sinon la fonction s’arrête au « if » et affiche l’erreur.

Dans un controller ça donnera ceci :

app.get('/movies', function (req, res) {

console.log('Récupération de la liste de tous les films !');

con.query("SELECT * FROM movies", function (err, result, fields) {

if (err) throw res.send(JSON.stringify(err));

res.send(JSON.stringify(result));

});

});

 

On transforme le retour en JSON afin de pouvoir l’utiliser quand on appellera notre controller avec notre application.

Si on testait tout ça ?

 

POST

On a réussi à récupérer nos films sur notre base de données depuis nos controller REST, c’est plutôt pas mal. Ce qui serait mieux ce serait de pouvoir ajouter un film à la liste, heureusement on a déjà tout préparé, il ne nous reste qu’à créer notre INSERT.

Cette fois, je vous conseille d’écrire la requête avant dans une variable histoire que ça ne fasse pas fouillis dans votre code. Vis à vis du fais que l’ont a paramétré le POST en form-data nos datas seront stocké dans « req.body », si vous faites un « console.log(req) » vous pourrez le voir dans le terminal.

Voici la requête POST entière :

app.post('/movie', function (req, res) {

console.log('Nouveau film ajouté !');

var sql = `INSERT INTO movies (title, realisateur, genre) VALUES ('${req.body.title}', '${req.body.realisateur}','${req.body.genre}')`;

 

con.query(sql, function (err, result) {

if (err) throw res.send(JSON.stringify(err));

res.send(JSON.stringify(result));

});

});

On l’appel dans Postman, Body > form-data > on met nos paramètres:

On peut voir dans le retour, l’id d’insertion « insertId : 3 », le nombre de rows affecté etc… C’est ce qu’on retrouve dans le paramètre « result ».

On va maintenant vérifier en récupérant tous nos films :

On a bien notre 3ème film !

 

UPDATE

Il est possible qu’une faute soit faite sur le titre d’un film ou encore le réalisateur. Par exemple, et par pur hasard, dans les films que j’ai créés il se pourrait que par maladresse j’ai écrit « Astrix » plutôt que « Astérix ». On va utiliser donc utiliser le controller update que l’ont avait créé et écrire la requête qui va avec.

app.put('/movie', function (req, res) {

console.log('Modification du film effectué !');

var sql = `UPDATE movies SET title='${req.body.title}', realisateur='${req.body.realisateur}', genre='${req.body.genre}' WHERE id='${req.body.id}'`;

 

con.query(sql, function (err, result) {

if (err) throw res.send(JSON.stringify(err), JSON.stringify(result));

res.send(JSON.stringify(result));

});

});

 

On va actualiser tous les champs malgré une seule erreur, ce qui nous facilitera la tâche dans l’application plus tard. On va faire l’update en fonction de l’id du film.

On teste tout ça dans Postman :

Et pour finir on récupère la liste des films afin de voir que l’update a bien fonctionné :

DELETE

Il ne nous reste plus que la suppression. Essentiel quand on part d’un CRUD. On va supprimer un film en fonction de son id. Du coup la requête et le controller donnerons ça :

app.delete('/movie', function (req, res) {

console.log('Film supprimé !');

var sql = `DELETE FROM movies WHERE id='${req.body.id}'`;

 

con.query(sql, function (err, result) {

if (err) throw res.send(JSON.stringify(err), JSON.stringify(result));

res.send(JSON.stringify(result));

});

});

On test !

Et on vérifie :

 

Sources

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *