Le MON-3 de Léonard

Tags :
  • MON
  • 2022-2023
  • temps 2
Auteurs :
  • Léonard Barbotteau

Le Back-end avec Node.js, puis la base de données Sqlite

Sources

Un tuto youtube sur Node.js Un tuto youtube sur la programmation asynchrone en Javascript De la documentation sur Sqlite La documentation sur express Une IA qui répond aux questions sépcifiques sur l'informatique avec une justesse étonnante

Introduction avec la programmation synchrone vs la programmation asynchrone.

D'après mes recherches, pour bien comprendre l'objet de ce MON il faut d'abord bien comprendre les notions de programmation synchrone/asynchrone.

Dans la programmation synchrone, on éxécute ligne par ligne, à chaque ligne on éxecute le code, et la ligne d'après on est certains que les lignes d'avant on été éxécutées.

Dans la programmation asynchrone, les conditions se font sur des événements qui peuvent intervenir à tout moment, et donc une ligne de code plus bas qu'une autre peut s'éxécuter avant la ligne plus haute, si la condition qui permet son éxécution est validée avant.

Imaginons on utilise readLine qui permet d'interagir avec un utilisateur :

const readLine = require('readline')

const r1 = readLine.createInterface({
  input: process.stdin,
  output: process.stdout
})

On va alors créer une fonction qui demande le prénom de quelqu'un. En asynchrone, on va poser la question et faire en sorte qu'une fonction s'éxécute lorsqu'on a donné la réponse à la question, avec un callback:

const demarrerProgramme = () => {
  r1.question('Quel est ton prénom?', reponse => {
    console.log('Ton prénom est ' + reponse)
    r1.close()
  })
}

Tant que la réponse n'est pas donnée, le programme éxécute les lignes suivantes.

Le back-end.

Je n'ai très peu de notions sur la question et je vais donc commencer par les bases de Node.js.

Qu'est ce que Node.js?

Node.js est un environnement d'exécution JavaScript qui permet de faire des applications web côté serveur. On peut utiliser JavaScript non seulement dans son navigateur, mais aussi sur son serveur web.

A quoi sert Node.js?

Node.js est très populaire pour la création de serveurs web et de services en temps réel en raison de sa performance et de sa flexibilité. Node.js permet également de construire des applications full-stack (c'est-à-dire avec une interface utilisateur côté client et un serveur côté serveur) en utilisant le même langage de programmation (JavaScript) sur les deux côtés.

Comment utiliser Node.js ?

Pour utiliser Node.js, on peut écrire des scripts Node.js dans un éditeur de texte et les exécuter à l'aide de la commande "node" dans son terminal. On peut également utiliser Node.js avec des frameworks tels que Express pour créer des applications web plus complexes. Ce sera le cas dans mon cours et pour la réalisation du POK.

Les fonctionnalités qu'Express peut fournir

Explorant ce qu'est le back-end, les premières questions qui me viennent à l'esprit sont : à quoi cela sert de faire le lien entre le serveur et le client et comment le faire grâce à Express? Nous allons le voir ici en listant les fonctionnalités d'Express

La base de données

La base de données SQLite fonctionnant sous Express

Je vais désormais expliquer comment développer une base de données Sqlite et la faire fontionner sous Express Pour ceci suivez ces étapes:

  1. Installez SQLite et le module Sqlite pour Node.js avec npm:
npm install sqlite3
  1. Créez un fichier comme BDD.sqlite dans le projet et utilisez le module sqlite3
const sqlite3 = require('sqlite3').verbose();
const db = new sqlite3.Database('BDD.sqlite');
  1. Créez une table dans la base de données en exécutant une requête SQL:
db.serialize(() => {
  db.run("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, pseudo TEXT, password TEXT)");
});
  1. Insérez des données dans la table en exécutant une autre requête SQL :
db.serialize(() => {
  const stmt = db.prepare("INSERT INTO users (pseudo, password) VALUES (?, ?)");
  stmt.run("Leonard", "draneol");
  stmt.run("Nathan", "nahtan");
  stmt.finalize();
});
  1. Créez un serveur Express et configurez-le pour pouvoir récupérer les informations de la base de données lors de requêtes HTTP :
const express = require('express');
const app = express();

app.get('/users', (req, res) => {
  db.all("SELECT * FROM users", (err, rows) => {
    res.send(rows);
  });
});

app.listen(3000, () => {
  console.log('Server listening on port 3000');
});

Voilà, l'application a bien été construite

Pour ajouter un nouvel enregistrement dans la table users avec les valeurs Vincent et tnecniv pour les colonnes name et password, vous pouvez utiliser une requête INSERT SQL comme ceci :

db.run("INSERT INTO users (name, password) VALUES (?, ?)", "Vincent", "tnecniv");

On peut également utiliser la méthode run d'une fonction préparée:

const stmt = db.prepare("INSERT INTO users (name, password) VALUES (?, ?)");
stmt.run("Vincent", "tnecnit");
stmt.finalize();

Cette méthode est efficace si on veut insérer plusieurs enregistrements.