Cours Node.js Cours Node.js - Partie 1 - Chat-bot en production avec Express et Heroku

Objectifs de cette partie

Prérequis: expérience en programmation JavaScript, usage du shell Linux

Durée estimée: 4 heures.


Exercice 1 - Afficher Hello World dans la sortie standard

Nous allons écrire et exécuter un premier programme Node.js dont la seule responsabilité sera d’afficher la chaîne de caractères “Hello World” dans la console. (sortie standard)

Attentes techniques: Le programme doit être constitué d’une seule ligne de code.

👉 Exerciseur en ligne: Afficher Hello World dans la sortie standard

🤖 Execution du robot de correction en local:

$ npm install github:adrienjoly/cours-nodejs # une fois pour toutes, pour installer le robot
$ npx cours-nodejs test 1-1 bonjour.js # pour faire tester bonjour.js au robot de l'exercice 1 de la partie 1

Exercice 2 - Une API simple mais polie

Le but est de développer un serveur Web/API basique qui répondra systématiquement “Bonjour !” à toutes les requêtes HTTP GET émises par des clients au chemin / (racine). Nous allons pour cela utiliser la bibliothèque Express.js.

Attentes fonctionnelles: Une fois le serveur lancé, l’envoi d’une requête HTTP GET à la racine du serveur web retourne bien le texte “Bonjour !”.

Attentes techniques: Le programme ne doit pas dépasser 15 lignes de code, et doit avoir express comme seule dépendance externe.

👉 Exerciseur en ligne: Une API simple mais polie

🤖 Execution du robot de correction en local:

$ npx cours-nodejs test 1-2 server.js

Indice: Utiliser les différentes sections de la partie “Mise en route” de la documentation de Express.js pour comprendre son fonctionnement et trouver (puis adapter) les exemples d’usage fournis.


Exercice 3 - Paramètres GET

Nous avons à présent un serveur web dont l’API contient un seul point d’entrée (endpoint):

Nous allons ajouter un point d’entrée GET /hello qui acceptera un paramètre nom, et ajustera le contenu de la réponse en fonction de la valeur de ce paramètre:

Attentes techniques: Le fichier ne doit pas dépasser 30 lignes de code, et doit avoir express comme seule dépendance externe.

👉 Exerciseur en ligne: Paramètres GET

🤖 Execution du robot de correction en local:

$ npx cours-nodejs test 1-3 server.js

Conseil: en cherchant une solution dans la documentation de Express.js, veillez à ce que la syntaxe résultante des URLs fournies ci-dessous soit respectée à la lettre.


Exercice 4 - Envoi de message en POST

Nous avons à présent un serveur web dont l’API contient deux points d’entrée (endpoints):

Maintenant, on souhaite que l’API réponde un message pertinent à chaque message envoyé par les utilisateurs. Sachant qu’un message peut être trop long pour passer par un paramètre GET, nous allons le passer via le corps d’une requête HTTP POST.

Pour cela, nous allons y ajouter un point d’entrée (endpoint) de méthode POST au chemin /chat. Celui-ci pourra adapter sa réponse en fonction du contenu passé avec chaque requête. Le contenu devra être passé au format JSON, et le message de l’utilisateur devra être transmis comme valeur de la propriété msg.

Exemples / cas d’usage:

Attentes techniques: Le fichier ne doit pas dépasser 40 lignes de code, et doit avoir express comme seule dépendance externe.

👉 Exerciseur en ligne: Envoi de message en POST

🤖 Execution du robot de correction en local:

$ npx cours-nodejs test 1-4 server.js

Indice: vous allez devoir intégrer un middleware à votre application Express, afin qu’elle soit en mesure d’extraire les données au format JSON.

Attention: la manière de procéder dépend de la version de Express utilisée par votre serveur.


Exercice 5 - Tester le serveur en local

Dans les exercices précédents, votre serveur était exécuté et testé dans le cloud, afin de simplifier vos premiers pas avec Node.js et Express.js.

Vous allez maintenant re-créer, exécuter et tester ce serveur sur votre propre ordinateur.

L’objectif est que, une fois lancé, votre serveur répondra comme prévu aux requêtes que vous lui enverrez, tel que décrit dans les exercices précédents.

Tests: vérifier si le serveur répond comme prévu

Commandes à exécuter (dans une session de shell Linux séparée de celle depuis laquelle votre serveur est exécuté), pour tester la réponse du serveur aux requêtes:

Pré-requis

Important: Si vous êtes sous Windows, merci d’utiliser exclusivement le shell Linux Ubuntu installé après avoir activé Windows Subsystem for Linux ou d’utiliser Linux depuis une machine virtuelle. Sous Mac ou Linux, vous serez en mesure d’utiliser votre shell Linux (ou “terminal”) par défaut.

Pour effectuer cet exercice, assurez-vous que les pré-requis suivants sont bien installés et accessibles depuis votre shell Linux:

Note: si vous avez installé Node.js sous Windows, il est probable que node et/ou npm ne fonctionnent pas depuis Ubuntu for Windows. Dans ce cas: installez-le depuis Ubuntu (cf procédure), puis redémarrez Ubuntu.

Étapes proposées

À chaque étape, assurez-vous de (re)démarrer votre serveur ($ node server.js), de lui envoyer les requêtes listées ci-dessus (depuis un shell Linux séparé) puis d’observer la réaction du serveur à cette requête, jusqu’à ce que l’objectif de l’exercice soit atteint:

  1. Depuis votre shell Linux, positionnez-vous dans votre répertoire personnel (home) puis créez un répertoire nodejs-chatbot dans ce dernier.

  2. Dans le répertoire nodejs-chatbot, créez un fichier server.js puis collez-y le contenu de l’exercice précédent.

    Note: si vous essayez d’exécuter $ node server.js, vous verrez que le serveur ne peut pas se lancer car il faut d’abord installer la dépendance express.

  3. Toujours depuis nodejs-chatbot, exécutez $ npm init pour initialiser le fichier de projet Node.js: package.json.

    Observez le contenu de package.json. À quoi sert ce fichier ?

  4. Installez la dépendance express à l’aide de $ npm install avec l’option --save.

    Pro tip: Le répertoire node_modules ne doit jamais être inclus dans les commits d’un dépôt git. Pour ajouter ce répertoire à la liste des répertoires et fichiers ignorés par git, taper $ echo node_modules >>.gitignore.

  5. Après avoir (re)démarré votre serveur sur votre machine, vérifier que l’objectif de l’exercice est atteint.

  6. Créez un fichier README.md pour expliquer le plus simplement possible à d’autres personnes: que fait votre programme Node.js, comment l’installer et l’exécuter sur sa propre machine, et comment le tester.


Exercice 6 - DĂ©ploiement en production

Vous avez développé et testé un serveur Node.js/Express.js qui fonctionne en local.

Pour que votre serveur répondre aux requêtes de n’importe quel utilisateur via Internet, vous allez le déployer en production.

Objectif de l’exercice: Déployez votre serveur sur heroku.com, puis vérifiez que celui-ci réponde comme prévu à d’autres utilisateurs que vous même, depuis leur machine.

Pré-requis

En plus des pré-requis listés dans l’exercice précédent, vous allez également devoir utiliser la commande git depuis votre shell Linux. Vérifiez que $ git config --global user.email retourne bien votre adresse email. Sinon, configurez votre commande git locale. Vous pouvez suivre ces étapes ou le tutoriel de votre choix.

Étapes proposées

  1. Inscription: Créez un compte puis une “application” depuis heroku.com.

    Ne cliquez PAS sur l’icône “GitHub” depuis heroku.com et n’activez pas de “pipeline”. Nous allons utiliser le déploiement manuel à l’aide de la commande heroku (CLI).

  2. Déploiement: Suivez les instructions fournies pour installer la commande (aussi appelé “CLI”) heroku sur votre machine et déployer votre serveur sur l’application que vous venez de créer.

    En cas de problème pour installer la commande heroku, vous pouvez l’installer comme dépendance locale à votre projet: $ sudo npm install -g heroku.

    Soyez attenti·f·ve: vous avez déjà effectué certaines des étapes fournies par Heroku. Évitez donc de répéter deux fois la même étape.

    La commande $ git push heroku master vous dira à quelle URL votre application a été déployée. Il est probable que votre serveur ne fonctionne pas en production, même si le déploiement s’est bien passé. (voir étape suivante)

  3. Configuration: Modifier le serveur pour qu’il puisse se lancer sur le port défini par la variable d’environnement PORT fournie par Heroku, avec une valeur par défaut à 3000 pour l’exécution en local.

    Documentation pour vous aider: Specify port for Heroku

  4. Documentation: Afin de pouvoir créer et déployer votre futur serveur plus rapidement, complétez README.md en listant les grandes étapes que vous avez suivies.

En cas de problème de déploiement

Si $ git push heroku master ne fonctionne pas (cf étape 4) ou ne pousse pas vos commits vers la bonne application Heroku, exécutez les commandes suivantes:

  $ git remote -v
  $ git remote rm heroku
  $ heroku create
  $ git remote add heroku <URL GIT RETOURNÉE PAR HEROKU>
  $ git push heroku master

Exercice 7 (BONUS) - Création d’un véritable chat-bot

Toujours à l’aide de Node.js et Express, écrire un chat-bot contactable depuis Facebook Messenger ou autre application mobile de messagerie instantanée (ex: Telegram).

Liens:


Pour aller plus loin

Modules: module.exports et require()

Fat arrow functions (=>)

Typage avec TypeScript