Loading

ESIR 2020 Express JS

Benoît Chanclou

This is a live streamed presentation. You will automatically follow the presenter and see the slide they're currently on.

Express JS

Qui suis-je ?

Benoît Chanclou

ExpressJS

Le complément

de NodeJS

Pourquoi Express ?

Ce qu'il est

  • runtime JavaScript
  • un moteur Chrome V8
  • monothread
  • une boucle d'événements
  • I/O non bloquantes

NodeJS

Ce qu'il n'est pas

  • ce n'est pas un framework web
  • rien de particulier pour gérer des API

NodeJS

d'où ExpressJS

Ce qu'apporte ExpressJS

  • un framework
  • minimaliste
  • intimement lié à NodeJS

 

Il offre

  • un meilleure niveau de programmation
  • abstraction de la tuyauterie

Express est fait pour 

créer des serveurs

facilement

Serveur

Un serveur doit gérer

  • le protocole
  • les routes
  • les requêtes
  • les réponses
  • les erreurs

Le serveur http RESTful

créer un serveur d'API

  • récupérer la requête
    • les paramètres
    • les entêtes
  • faire des choses
  • construire la réponse
    • corps
    • entêtes

de Node à Express

les bases

Serveur http minimaliste node

var http = require('http');

http.createServer(function(req, res) {
    res.write('hello world');
    res.end();
}).listen(3000);

Requête du serveur

$ node mon_serveur.js

$ curl http://localhost:3000

hello world

Serveur http node

var http = require('http');

http.createServer(function(req, res) {
  if (req.url == '/tom'){
    res.write('hello tom')
  } else {
    res.write('hello world');
  }
  res.end();
}).listen(3000);

Requête du serveur

$ node mon_serveur.js &

$ curl http://localhost:3000/

hello world

$ curl http://localhost:3000/tom

hello tom

$ curl http://localhost:3000/joe

hello world

Installer Express

$ npm install --dev express

ou 

$ yarn add express

Serveur http express

var http = require('http');
var express = require('express');
var app = express();

app.use('/tom', (req, res, next) => {
  res.write('hello tom');
  res.end();
});

app.use((req, res, next) => {
  res.write('hello world');
  res.end();
});

http.createServer(app).listen(3000);

use

  • signature
app.use([path,] callback [, callback...])
  • signature callback
function mw1(req, res, next) { next(); }
  • req : requête
  • res : réponse
  • next : étape suivante

Autres méthodes

  • get
  • post
  • put
  • delete
  • patch
  • ... (toutes les méthodes du protocole http)
  • all

Serveur http express

app.get('/tom', (req, res, next) => {
  res.write('hello tom');
  res.end();
});

app.post('/tom', (req, res, next) => {
  res.write('creating tom...');
  res.end();
});

Requête du serveur

$ curl http://localhost:3000/tom

hello tom

$ curl -X POST http://localhost:3000/tom

creating tom...

Minimaliste

Seuls 4 objets sont définis

  • Application
    • routeur principal et gestion de l'application
  • Router
    • routeurs secondaires
  • Request
    • requête (corps, entêtes, paramètres, cookies,...)
  • Response
    • réponse à une requête (corps, entêtes,...)

l'objet application

l'objet routeur

l'objet de requête

l'objet de réponse

Le système de callback

anatomie d'un callback

  • signature
function mw1(req, res, next) { next(); }
  • req : requête
  • res : réponse
  • next : étape suivante

algorithme simplifié d'appel des callbacks

Recherche d'une callback

appel callback

appel next

renvoyer la réponse

oui

non

non

oui

Comment ne pas faire

méga callback

Construction de la réponse

Succession d'appels de callbacks

Authentification

Extraction des paramètres

Récupération du tenant

Formater la réponse

Accès aux données

Et si on renommait les callbacks :

 middlewares 

Ainsi naquirent les middlewares 

  • express.json([options])
  • express.static(root, [options])
  • express.urlencoded([options])

Ressources

Sites

  • https://github.com/rajikaimal/awesome-express
  • https://expressjs.com/fr

Base de données

NoSQL

Unitaires,

d'intégration,

de charge

Made with Slides.com