Open menu

Etape 1 - installation de nodejs
  • Sous debian/ubuntu/..., il suffit d'installer le set minimal de paquets, à savoir nodejs et npm :
apt-get install nodejs npm
  • Après l'installation, vous avez accès à deux commandes : node pour lancer un projet nodejs, et npm pour gérer les packages du projets
  • npm = node package manager. La commande npm permet d'installer des packages (=extensions) nodejs pour chacun de vos projets.
  • A noter que vous pouvez également installer des packages node de façon globale. Pour cela, il suffit d'installer avec apt-get le paquet associé au module.
  • Cependant, on gère plutôt les packages projet par projet.
  • Sous windows, vous trouverez l'installeur ici : https://nodejs.org/en/download/
  • Dans une console, vous aurez allors accès à la commande node et npm, comme sous linux.
Etape 2 - installation de mongodb
  • Il suffit de suivre les instructions données ici : https://docs.mongodb.com/manual/installation/
  • ATTENTION : si vous avez déjà une versiond e mongodb installée, il est conseillée de l'effacer, y compris les répertoire où étaient stockées les BdD.
Etape 3 - création dela BdD
  • Comme sous mysql, il est possible d'importer une base à partir d'un dump préalable.
  • Vous pouvez télécharger le dump ici : [ rpg.dumpmongo.tgz ]
  • Décompatez l'archive dans un répertoire. Cela crée un sous-répertoire rpg.
  • Pour créer la table : mongorestore -d rpg rpg. Cela permet de restaurer le contenu du répertoire rpg dans la base nommée rpg.
Etape 4 - mise en place du serveur nodejs
  • Les sources du serveur se téléchargent ici : [ myrpg.tgz ]
  • Décompactez l'archive dans un répertoire. Cela crée un sous-répertoire myrpg dans lequel vous allez.
  • Vous pouvez éventuellement éditer le fichier .env, dans lequel se trouve la variable indiquant le numéro de port sur lequel le serveur nodejs écoute.
  • Pour lancer le serveur : node rpg.js
  • Lancer un navigateur et tapez l'URL : http://localhost:3334/rpg/items/get.
  • Normalement, la liste des items apparaît.

Quelques explications
  • nodejs est à la base un interpréteur de JS.
  • Il existe cependant des packages très utiles pour créer un serveur Web de façon très simple. En l'occurence, le projet se base sur express.
  • De même, il existe des packages pour gérer l'accès aux BdD. Ce projet utilise mongoose.
  • Une application node bien construire est répartie en différents fichiers, chacun constituant un "module".
  • Pour chaque fichier/module, on peut définir des variables/fonctions qui sont "exportées" hors du module. Cela veut simplement dire que cela permet d'y accéder dans d'autres modules. Cette exportation se fait grâce au mot-clé exports (cf. doc langage JS pour toutes ses utilisations).
  • Quand un module veut accéder aux exports d'un autre module, il utilise le mot-clé require en donnant le chemin d'accès au module contenant les exports (NB : avec ou ans extension .js). En retour, on obtient un objet contenant tous les exports du module. Généralement, on met cet objet dans une variable que l'on nomme comme on veut, qui permet ensuite d'accéder aux exports.
Exemple :
  • dans fich1.js, si on écrit :
1
2
3
4
exports.message = "salut";
exports.say = function () {
  console.log(exports.message);
}

 

  • cela permet d'exporter une variable message et une fonction say.
  • dans fich2.js, si on écrit :
1
2
3
var obj = require('./fich1.js');
console.log(obj);
obj.say();

 

  • alors l'execution de fich2.js donne :
1
2
{ message: 'salut', say: [Function] }
salut

 


  • Quand on veut créer un site web, on organise l'application selon une structure assez classique, type MVC :
    • models :  contient les données et modèles de données gérés par le serveur. Dans le cas présent, il contient seulement la définition des schémas et modèles mongoose décrivant les différents objets stockés dans la BdD.
    • controllers : contient les fonctions qui vont être appelées lors d'une requête et qui vont manipuler le modèle. Dans le projet, ces fonctions sont regroupées dans plusieurs fichiers, chacun s'occupant des accès à une collection de la BdD.
    • routes : contient la définition des routes (=URL d'accès) du site. Grâce à express, on peut très facilement associer un chemin d'accès à une des fonctions contrôleur.
    • views : contient les pages (soit en HTML, soit sous forme de template) qui vont être envoyées au navigateur. Dans le projet, vu que c'est une API, il n'y a aucune page renvoyée. Ce sont les fonctions contrôleur qui renvoient directement des objets JSON au client. Ce répertoire n'existe donc pas dans le projet.
  • L'avantage de cette organisation modulaire est qu'elle est facilement reproductible et adaptable à la plupart des projets, surtout quand il s'agit de créer une API Web se contentant d'accéder à une BdD.