Dans cet atelier, tu vas apprendre Ă  faire communiquer un client React.js avec un serveur Express.js, spĂ©cifiquement autour d’une fonctionnalitĂ© clĂ© et tout Ă  fait classique : la gestion des fichiers.

Cet atelier sera trÚs guidé / accompagné, de sorte que tu puisses te remettre à fond dans ton projet 3 et implémenter cette fonctionnalité au besoin.

Notre rĂ©fĂ©rentiel de dĂ©part pour cet exercice : permettre Ă  une personne d’ajouter une photo de profil. Autant partir de quelque chose de trĂšs ordinaire pour bien comprendre comment ça marche 😃

Pour rester dans un environnement connu, crĂ©ons un projet Monorepo tout neuf, et entreprenons les lignes de commande dans l’ordre suivant afin d’ĂȘtre tranquille cĂŽtĂ© configuration :

  1. Exécute la commande suivante dans un terminal (utilise le terminal powershell si tu es sur windows) :
npm create @this-is-to-learn/js-monorepo@latest file_upload

/*
   Une fois l'installation terminée, rends-toi dans le répertoire nouvellement 
	 créé
*/

cd ./file_upload
  1. Exécute la commande npm install pour installer toutes les dépendances nécessaires au projet.

  2. Dans le dossier server/, copie / colle le fichier .env.sample, et renomme la copie en .env. Fais la mĂȘme chose pour le dossier client/.

  3. Mets à jour tes informations de connexion à ta base de données. Tu peux donner le nom que tu veux à ta base de données.

  4. Exécute la commande npm run db:migrate pour exécuter le script se trouvant dans server/database/schema.sql.

  5. Exécute la commande npm run dev à la racine du monorepo pour lancer le client et le server simultanément.

Pour finir avec la configuration, on va se rendre dans le fichier app.js situé dans le dossier server/src/. Tu vas décommenter le middleware suivant :

app.use(express.json());

🧠 Exercice : CrĂ©ation d’une table dans la base de donnĂ©es

Pour bien faire, nous allons gĂ©nĂ©rer une table user. Pour cela, rends-toi dans le fichier /server/database/schema.sql. Supprime tout ce qu’il y a dedans, et Ă©crit une table user contenant les champs suivants :