Check

Connexion Au Sgbd

Création et accès à la page catégories (2/3)

Vous allez récrire l’application Lafleur , initialement écrite enPHP, en javascript.

Prérequis

Créez un répertoire db

Créez dans ce répertoire un fichier dbConnexion.js.

Créez un fichier .env à partir de la racine (ne pas oublier le point devant env !!!).

Télécharger les modules : mysql et dotenv.

1 - Exécution du script sql

Créez votre base de données et lancez le fichier sql.
Si vous avez oublié, voyez comment faire ici

2 - Création de la structure des répertoires et des fichiers

a - modification du fichier .env

# DB Configurations
DB_HOST=localhost
DB_USER='root'
DB_PASS=’’
DB_DATABASE=lafleur2013

b - ajout de la connexion dans le fichier dbConnexion

const dotenv = require('dotenv');
const mysql = require('mysql');
// Chargement du fichier .env
dotenv.config();

// Affectation des variables du fichier.env
const {DB_HOST,DB_USER,DB_PASS,DB_DATABASE}= process.env;
//Paramétrage de la connexion fournie par le fichier .env
const db = mysql.createConnection({
    host: DB_HOST,
    user: DB_USER,
    password: DB_PASS,
    database: DB_DATABASE
});

//Établissement de la connexion
db.connect((err) => {
    if (err) {
        throw err;
    }
    // console.log('Mysql Connecté ....')
    console.log('Base de données : ' + db.state);
});

// Préparation de l'exécution d'une requête
query = async (sql, values) => {
    return new Promise((resolve, reject) => {
        const callback = (error, result) => {
            if (error) {
                reject(error);
                return;
            }
            resolve(result);
        }
        // L'exécution appellera les requêtes préparées ou classiques
        db.query(sql, values, callback);
    }).catch(err => {
        const mysqlErrorList = Object.keys(HttpStatusCodes);
        // converti les erreurs mysql en statut HTTP
        err.status = mysqlErrorList.includes(err.code) ? HttpStatusCodes[err.code] : err.status;
        throw err;
    });
};

const HttpStatusCodes = Object.freeze({
    ER_TRUNCATED_WRONG_VALUE_FOR_FIELD: 422,
    ER_DUP_ENTRY: 409
});

Réécriture des requêtes PHP en Javascript. Ce code est à mettre à la suite du précédent :

module.exports = {
    getLesCategories:async (param=[]) => {
        try {
            return await new Promise((resolve, reject) => {
                const sql = 'select * FROM categorie';
                // db.query(requête sql, paramètres s'ils existent, callback (soit erreur soit execution requête)
                db.query(sql, param, (err, result) => {
                    if (err) throw reject(new Error(err.message));
                    //Exécution de la requête s'il n'y a pas d'erreurs
                    resolve(result)
                })
            });
        } catch (error) {
            console.log(error);
        }
    },
}

La fonction exploite les promesses comme expliqué dans la fiche promesses . Si l’exécution se passe correctement, c’est la fonction resolve qui s’exécute, sinon c’est une fonction reject qui n’est pas utilisée ici.

c - Récupération des données dans le contrôleur

Vous allez connecter le module de base de données au contrôleur. En haut du fichier du contrôleur, copiez :

const db = require('../db/dbConnexion');

Il s’agit maintenant d’appeler les données à partir du modèle. La variable lesCategories est instanciée à partir d’une fonction :

voirCategories:async (req, res) => {
        const lesCategories=await db.getLesCategories();
        //Appel de la vue produit et envoie des données
        res.render('produit',{
            lesCategories:lesCategories
        });
}

le code de la vue

Pour la vue, il n’y a rien à changer

Rafraichissez ou Lancez de nouveau l’application (si besoin)

Vous devez voir les 3 catégories s’afficher.