Prérequis: expérience en programmation JavaScript, usage du shell Linux
Durée estimée: 4 heures.
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
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.
GET
Nous avons à présent un serveur web dont l’API contient un seul point d’entrée (endpoint):
GET /
retourne systématiquement “Bonjour !”.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:
GET /hello?nom=Sasha
doit obtenir la réponse Bonjour, Sasha !
GET /hello?nom=Michel
doit obtenir la réponse Bonjour, Michel !
GET /hello
doit obtenir la réponse Quel est votre nom ?
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.
POST
Nous avons à présent un serveur web dont l’API contient deux points d’entrée (endpoints):
GET /
retourne systématiquement “Bonjour !”.GET /hello
retourne une salutation au nom
fourni en paramètre GET.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:
POST http://localhost:3000/chat
avec le contenu {"msg":"ville"}
doit obtenir la réponse “Nous sommes à Paris”POST http://localhost:3000/chat
avec le contenu {"msg":"météo"}
doit obtenir la réponse “Il fait beau”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.
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.
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:
$ curl "http://localhost:3000/"
doit obtenir la réponse “Bonjour !”$ curl "http://localhost:3000/hello?nom=Sasha"
doit obtenir la réponse “Bonjour, Sasha !””$ curl "http://localhost:3000/hello?nom=Michel"
doit obtenir la réponse “Bonjour, Michel !””$ curl "http://localhost:3000/hello"
doit obtenir la réponse “Quel est votre nom ?”$ curl -X POST --header "Content-Type: application/json" --data "{\"msg\":\"ville\"}" "http://localhost:3000/chat"
doit obtenir la réponse “Nous sommes à Paris”$ curl -X POST --header "Content-Type: application/json" --data "{\"msg\":\"météo\"}" "http://localhost:3000/chat"
doit obtenir la réponse “Il fait beau”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:
node
, version 10 ou supérieure; (vérifier avec $ node --version
)curl
; (vérifier avec $ curl --version
)Note: si vous avez installé Node.js sous Windows, il est probable que
node
et/ounpm
ne fonctionnent pas depuis Ubuntu for Windows. Dans ce cas: installez-le depuis Ubuntu (cf procédure), puis redémarrez Ubuntu.
À 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:
Depuis votre shell Linux, positionnez-vous dans votre répertoire personnel (home
) puis créez un répertoire nodejs-chatbot
dans ce dernier.
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épendanceexpress
.
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 ?
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ôtgit
. Pour ajouter ce répertoire à la liste des répertoires et fichiers ignorés pargit
, taper$ echo node_modules >>.gitignore
.
Après avoir (re)démarré votre serveur sur votre machine, vérifier que l’objectif de l’exercice est atteint.
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.
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.
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.
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).
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)
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
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.
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
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:
module.exports
et require()
=>
)