Express JS est un framwork Javascript pour nous faciliter la tache dans notre development NodeJS (request & response, routing .. )

npm install --save express
const express = require('express');
const app = express();

const express = require('express');

const app = express();

// executed for every incoming request
app.use((req, res, next) => {
    console.log('in the middleware');
    // next nous permet de continuer l'execution du code
    next();
});
app.use((req, res, next) => {
    console.log('another middleware');
    res.send('<h1>Hello from the other side</h1>');
});

app.listen(3000);

PARSE INCOMING REQUEST

npm install --save body-parser
const express = require('express');
const bodyParser = require('body-parser');
const app = express();

// parseur sinon on a 'undefined' a req.body
app.use(bodyParser.urlencoded({extended: false}));

app.use('/add-product', (req, res, next) => {
    res.send('<form action="/product" method="POST"><input type="text" name="title"><button type="submit">Add Product</button></form>');
});

app.use('/product', (req, res, next) => {
    console.log(req.body)
    res.redirect("/");
})

app.use('/', (req, res, next) => {
    res.send('<h1>Hello from the other side</h1>');
});

app.listen(3000);

LIMIT INCOMING REQUEST TO POST REQUEST :

// only for post
app.post('/product', (req, res, next) => {
    console.log(req.body)
    res.redirect("/");
})
// only for get
app.get('/product', (req, res, next) => {
    console.log(req.body)
    res.redirect("/");
})
// delete / patch / put fonctionnent aussi 

USING EXPRESS ROUTER :

Nous allons créer un dossier (par convention ) nommé Routes avec deux fichier dedans : admin.js et shop.js

// admin.js 
const express = require ("express")
// on utilise ici router !
const router = express.Router();

// router remplace 'app'
router.get('/add-product', (req, res, next) => {
    res.send('<form action="/product" method="POST"><input type="text" name="title"><button type="submit">Add Product</button></form>');
});

router.post('/product', (req, res, next) => {
    console.log(req.body)
    res.redirect("/");
})
// on l'exporte pour l'utiliser dans le app.js
module.exports = router;

// shop.js : 
const express = require("express")
const router = express.Router();

router.get('/', (req, res, next) => {
    res.send('<h1>Hello from the other side</h1>');
});

module.exports = router

// app.js : 
const adminRoutes = require("./routes/admin");
const userRoutes = require("./routes/shop")
...
app.use(adminRoutes);
app.use(userRoutes);

ADD 404 error page :

// catch all routes 
app.use((req, res, next) => {
    res.status(404).send('<h1>Page not found ... </h1>')
});

FILTER ROUTES :

Si nos routes commencent par le même début : /admin/add-product

// on le rajoute dans notre app.js : 
app.use('/admin', adminRoutes);

SERVING HTML PAGE :

On va creer un dossier 'views' dans notre projet avec deux fichiers .html