ExpressJS:Template engines
template engines ce sont des modules qui permettent qui permet d'écrire des codes dynamiques (variables, fonctions) dans une page statique (HTML) ,il existe plusieurs template engines comme
- Pug
- Mustache
- EJS
- Jade:le générateur par défaut de ExpressJS
Exemple1 :Pug les variables
views/index.pug
html
head
title= variable1
body
h1= variable2
Serveur.js
//importer expressjs
var express = require('express');
var app = express();
app.set('views', './views');
app.set('view engine', 'pug');
app.get('/index', (req, res) => {
res.render('index', { variable1: 'le titre de la page', variable2: 'Bonjour tout le monde' })
})
//démarer le serveur sur le port 8081
app.listen(8081, function () {
console.log('Écoute du port 8081');
});
Exemple2 :Pug les boucles,tableaux,objets
views/index.pug
html
head
title= variable1
body
h1= variable2
ul
each val, index in tableau
li= index + ': ' + val
table(style='width:100%', border='1')
thead(style='width:100%', border='1')
th nom
th prenom
each val, key in clients
tr
td=val.nom
td=val.prenom
Serveur.js
//importer expressjs
var express = require('express');
var app = express();
app.set('views', './views');
app.set('view engine', 'pug');
app.get('/index', (req, res) => {
res.render('index',
{
variable1: 'le titre de la page',
variable2: 'Bonjour tout le monde',
tableau:['a','b','c'],
clients:[{'nom':'client1','prenom':'prenom1'},
{'nom':'client2','prenom':'prenom3'}
]
})
})
//les routes
const test = require('./routage')
app.use('/tests',test)
//démarer le serveur sur le port 8081
app.listen(8081, function () {
console.log('Écoute du port 8081');
});
Exemple 3
app.js
La struture du projet est la suivante:
project-root |-- views | |-- index.pug |-- public | |-- styles.css |-- app.js
views/index.pug
public/styles.css
Exemple 4
Créer un blog avec des articles et des commentaires.
project-root |-- views | |-- articles.pug | |-- article.pug |-- public | |-- styles.css |-- app.js
app.js
views/articles.pug
views/article.pug
public/styles.css
Les instructions if, elseif , else et switch
app.js
views/index.pug
Exemple2
app.js
views/index.pug
Exercice1
Créer un formulaire d'inscription client(id,ville,nom,email,sexe)
views/inscriptionClient.pug
html
head
title Ajouter un client
body
form(action="add" method="post")
fieldset
legend Ajouter un nouveau client
table
tr
td
span Nom
td
input(type="text" name="nom")
tr
td
span Email
td
input(type="email" name="email")
tr
td
span Genre
td
span F
input(type="radio" name="genre" value="F")
span M
input(type="radio" name="genre" value="M")
tr
td
span Ville
td
select(name="ville")
option ville1
option ville2
option ville2
td
input(type="submit" value="Add")
h2=message
Serveur.js
//importer expressjs
var express = require('express');
var app = express();
const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: true }))
app.use(bodyParser.json())
app.set('views', './views');
app.set('view engine', 'pug');
var message="";
//afficher le formulaire
app.get("/client/add",(req,res)=>{
res.render("inscriptionClient")
});
//recuppérer les données from le form
app.post("/client/add",(req,res)=>{
if(req.body.nom=='' || req.body.email=='')
{
message="tout les champs sont obligatoires";
}
else
{
message="Welcome ";
message+=" Nom:"+req.body.nom;
message+=" Email:"+req.body.email;
message+=" Ville:"+req.body.ville;
message+=" Genre:"+req.body.genre;
}
res.render("inscriptionClient",{message,})
});
//démarer le serveur sur le port 8081
app.listen(8081, function () {
console.log('Écoute du port 8081');
});
Exercice2
Créer un menu de navigation mutli-langue en utlisant, bootstrap et les cookies
views/navbar.pug
link(rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css")
script(src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.3/jquery.min.js")
script(src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js")
body
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="#">MonSite.com</a>
</div>
<ul class="nav navbar-nav">
each val, index in liens
li
a=val
</ul>
<ul class="nav navbar-nav navbar-right">
<li><a href="/Fr">FR</a></li>
<li><a href="/En">EN</a></li>
</ul>
</div>
</nav>
Serveur.js
//importer expressjs
var express = require('express');
var app = express();
var cookieParser = require('cookie-parser');
app.use(cookieParser());
app.set('views', './views');
app.set('view engine', 'pug');
var textLinks=["Ajouter","Afficher","Supprimer","Modifier"] ;
app.get('/index', (req, res) => {
switch(req.cookies.lang){
case 'Fr': textLinks=["Ajouter","Afficher","Supprimer","Modifier"] ;break;
case 'En': textLinks=["Add","View","Remmove","Update"] ; ;break;
}
res.render('index',
{
liens:textLinks
})
})
app.get("/En",(req,res)=>{
res.cookie('lang', 'En');
textLinks=["Add","View","Remmove","Update"] ;
res.redirect("/index");
})
app.get("/Fr",(req,res)=>{
res.cookie('lang', 'Fr');
textLinks=["Ajouter","Afficher","Supprimer","Modifier"];
res.redirect("/index");
})
//démarer le serveur sur le port 8081
app.listen(8081, function () {
console.log('Écoute du port 8081');
});