Tutoriel Node.js avec exemples exécutables
Un tutoriel Node.js gratuit avec des exemples qui s'exécutent dans la page : fichiers, modules, l'event loop, des serveurs Express auxquels vous envoyez des requêtes, MongoDB et JWT. Modifiez le code et relancez-le.
Commencer le coursPremiers pas
- C'est quoi Node.jsNode.js est un runtime qui exécute du JavaScript en dehors du navigateur, sur des serveurs et dans le terminal. Ce n'est ni un langage ni un framework : c'est V8, plus un event loop, plus des API pour les fichiers, le réseau et les processus.
- Node.js vs JavaScriptJavaScript est le langage ; Node.js est un programme qui l'exécute en dehors du navigateur. La syntaxe est identique, mais les variables globales et les API intégrées autour de votre code sont différentes.
- process.argvprocess.argv est un tableau contenant la ligne de commande qui a lancé votre programme : l'exécutable node, le chemin du script, puis chaque argument saisi. Utilisez process.argv.slice(2) pour n'obtenir que vos arguments.
- process.envprocess.env est un objet qui contient les variables d'environnement avec lesquelles votre programme Node.js a été lancé. Chaque valeur est une chaîne ou undefined, donc convertissez vous-même nombres et booléens et donnez une valeur par défaut à chaque variable.
- Lire une saisieNode.js n'a pas de fonction prompt(). Pour poser une question à l'utilisateur dans le terminal, créez une interface readline sur process.stdin et appelez question(), ou attendez-la avec await via readline/promises.
Fichiers et chemins
- fs.readFileLisez un fichier en Node.js avec fs.readFile (callback), fs.readFileSync ou await readFile de fs/promises. Passez 'utf8' pour obtenir une chaîne, et gérez ENOENT quand le fichier n'existe pas.
- fs.writeFileÉcrivez un fichier en Node.js avec fs.writeFile, fs.writeFileSync ou await writeFile de fs/promises. Le fichier est créé s'il n'existe pas et remplacé s'il existe ; utilisez appendFile pour ajouter à la fin.
- fs/promisesfs/promises est la version à promesses du module fs de Node : readFile, writeFile, readdir, stat, mkdir, rm et rename renvoient tous des promesses que vous attendez avec await, et les erreurs s'interceptent avec try/catch.
- Module pathLe module path construit et décompose les chemins de fichiers correctement pour le système d'exploitation. path.join colle des segments ensemble ; path.resolve les transforme en chemin absolu, en partant du dossier courant.
Node asynchrone
- Event loopL'event loop de Node.js exécute vos callbacks par phases (timers, poll, check, close), et entre deux callbacks il vide la file process.nextTick puis la file des promesses. Lancez les exemples pour voir l'ordre exact.
- EventEmitterEventEmitter, du module events de Node, permet à un objet d'annoncer des événements nommés avec emit et à d'autres parties du code d'y réagir avec on ou once. Les listeners s'exécutent de façon synchrone, dans l'ordre où ils ont été ajoutés.
HTTP et Express
- Serveur HTTP`http.createServer()` prend une fonction qui s'exécute à chaque requête avec `req` et `res`. Vous lisez la méthode et l'URL dans `req`, puis définissez un statut, des en-têtes et un corps sur `res` avant d'appeler `res.end()`.
- Routing ExpressUne route Express, c'est une méthode, un chemin et un handler : `app.get('/users/:id', handler)`. Regroupez les routes liées dans un `express.Router()` et montez-le sous un préfixe avec `app.use('/api', router)`.
- Middleware ExpressUn middleware Express est une fonction `(req, res, next)` qui s'exécute avant votre handler de route. Il peut lire ou modifier la requête, y mettre fin avec une réponse, ou appeler `next()` pour la transmettre.
- req.params, query, body`req.params` contient les parties nommées du chemin (`/users/:id`), `req.query` la query string (`?sort=new`), et `req.body` le corps de la requête parsé, qui vaut `undefined` tant que vous n'ajoutez pas un parser comme `express.json()`.
- Gestion des erreursUn gestionnaire d'erreurs Express est un middleware à quatre arguments, `(err, req, res, next)`, enregistré après vos routes. Express 5 lui transmet les erreurs levées, les appels à `next(err)` et les promesses rejetées des handlers async.
- express.static`app.use(express.static(path.join(__dirname, 'public')))` sert chaque fichier du dossier `public` à l'URL correspondante : `public/style.css` répond à `/style.css`. Ajoutez un chemin de montage pour les servir sous un préfixe.
- CORS dans ExpressUne erreur CORS signifie que le navigateur a empêché une page de lire la réponse de votre API, parce que la réponse n'autorisait pas l'origine de la page. Elle se corrige côté serveur en envoyant `Access-Control-Allow-Origin` et en répondant aux requêtes preflight `OPTIONS`, à la main ou avec le package `cors`.
Données et authentification
- MongoDBUtilisez MongoDB depuis Node.js avec le driver officiel mongodb : connectez-vous avec MongoClient, puis insérez, cherchez, modifiez et supprimez des documents dans une collection, le tout avec async/await.
- JWTUn JWT est un token signé en trois parties base64url qu'un serveur délivre à la connexion et vérifie à chaque requête. En Node.js, on le signe et on le vérifie avec le package jose ou jsonwebtoken et une clé secrète.