Skip to content
Snippets Groups Projects
Forked from an inaccessible project.

Backend Sigma

Ce dépôt contient le backend de Sigma, le successeur de Frankiz.

Pour obtenir une copie de ce dépôt, clonez-le avec

git clone git@gitlab.binets.fr:br/sigma-backend.git

ou git clone https://gitlab.binets.fr/br/sigma-backend.git, puis installez les dépendences JavaScript avec npm install.

Dépendances

Une dépendance, c'est un librairie JavaScript dont dépend le code source, soit pour le faire tourner soit pour faire tourner les outils dévs. Les dépendances dév servent à tester par exemple. On trouve la liste des dépendances dans package.json. Express est un exemple de dépendance normale, nodemon et ESLint (voir infra) sont des dépendances dev (devDependencies).

Les dépendances s'installent avec npm install. Par défaut, toutes les dépendances sont installées. Si la variable NODE_ENV est configurée (vérifier avec la commande echo "$NODE_ENV"),

  • la valeur development installe tout
  • la valeur production n'installe pas les dépendances dév

Certaines d'entre elles comme KnexJS ou Webpack devraient être installées globalement :

npm install -g knex
npm install -g webpack

Structure

Les fichiers source se situent dans le dossier src.

Le serveur utilisé est express.js ; il est configuré dans server.js puis lancé sur le port 8888 dans index.js.

La syntaxe adoptée est JavaScript ES6, un standard moderne (2015) de JavaScript. Il permet d'importer des dépendances en utilisant le mot-clé import, ce que le serveur Node.js ne comprend pas puisque la version 8 de Node ne comprend que le standard ES5 (2009), qui gère les imports avec require().

Node comprend le code dans build/bundle.js, donc on le lance dessus après avoir compilé ce fichier.

Base de données

La base de donnée utilisée est PostgreSQL.

Le schéma de la BDD est géré par Knex. La config de Knex est dans knexfile.js : c'est un objet JSON qui précise la BDD à lequelle se connecter, l'utilisateur sous lequel elle est, le mot de passe...

  • knex migrate:make migration_name crée une migration dans migrations/ : le nom du fichier est migration_name.js avec la date et l'heure en préfixe
  • knex migrate:latest met à jour le schéma de la BDD
  • knex seed:make filename crée un seed seeds/filename
  • knex seed:run insère les seeds dans la BDD

Seeds

Un fichier seed permet d'insérer des données dans la BDD.

Scripts

Les scripts sont des instructions en ligne de commande que l'on peut faire tourner avec la commande npm run. Ils sont définis dans package.json.

Transpiler le serveur

On utilisera Webpack pour transpiler le fichier source src/index.js en build/bundle.js qui est suit la syntaxe ES5 compatible Node. Pour ça, on utilise

  • npm run build qui exécute la commande webpack avec le fichier de configuration webpack.config.js, ou
  • npm run watch qui recompile automatiquement dès que le code est modifié.

Démarrer le serveur

Pour faire tourner le serveur, il y a deux options :

  • npm start fait tourner le serveur bundle.js en mode prod sur le port 8888 (donc il faut consulter https://localhost:8888)
  • npm test le démarre avec nodemon, outil dév qui redémarre automatiquement le serveur dans bundle.js dès que celui-ci est modifié.

Donc, lancer npm run watch dans un terminal et npm test dans un autre permet de recompiler le serveur et le redémarrer automatiquement dès qu'il y a une modification.

ESLint

On utilisera ESLint pour standardiser le code : un ensemble de règles de style pour le code sont appliquées, et quelques-unes d'entre elles sont dans le fichier .eslintrc.json. Pour l'instant, la config ESLint impose d'utiliser quatre espaces pour les indentations et d'utiliser des points-virgule en fin de ligne.

Pour faire valider un fichier file.js par ESLint, utilisez

npm run lint file.js

et avec l'option --fix pour corriger le fichier.

Sinon, si vous utilisez Atom ou Visual Studio Code pour éditer votre code, il existe des plugins qui font tourner ESLint en live sur le code et vérifient que tout est en ordre.

Pour mieux comprendre ESLint, référez-vous à la doc.