Dans la version 3 d'Express, certaines fonctionnalités ont été supprimées:
the concept of a "layout" (template engine specific now)
partial() (template engine specific)
Changelog: https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x
La partial()
peut être modifiée pour la fonction propre à EJS appelée include
, mais quelle est l'alternative pour les mises en page?
Il semble que depuis Express 3, la fonctionnalité de disposition soit déléguée à la responsabilité des moteurs de modèles. Vous pouvez utiliser ejs-locals ( https://github.com/RandomEtc/ejs-locals ) pour la présentation.
Installer les ejs-locals
npm install ejs-locals --save
Utilisez ejs-locals comme moteur d'application dans app.js
var express = require('express');
var engine = require('ejs-locals');
...
app.engine('ejs', engine);
app.set('view engine', 'ejs');
Maintenant, vous pouvez utiliser la mise en page
layout.ejs
<body>
<%- body %>
</body>
index.ejs
<% layout('layout') -%>
<div class="container">
<div class="jumbotron">
...
Une autre option consiste à utiliser des partiels express ( https://github.com/publicclass/express-partials ). Les deux font la même chose, c'est donc votre choix.
J'ai eu du mal avec cela aussi. J'ai donc mis en place un projet github avec un exemple pour ejs et dustjs.
https://github.com/chovy/express-template-demo
Je ne suis pas sûr que la différence entre un partial et un include, il n'est pas nécessaire de transmettre explicitement les données à un include. Vous ne savez pas pourquoi vous voudriez un partiel.
Mais pour une mise en page, vous spécifiez simplement un bloc comme ceci:
//layout.ejs
<html>
<%- body %>
</html>
//page1.ejs
<% layout('layout') -%>
This is loaded from page 1 and overrides <%- body %> in the layout.ejs.
Si quelqu'un veut ajouter d'autres exemples, il suffit de soumettre une demande d'extraction.
Vous pouvez imiter les mises en page EJS dans Express 2.x avec l'option "inclure". Voir ma réponse ici: