Comment se débarrasser de Jade en utilisant Express avec Node.JS ? Je veux juste utiliser du html simple. Dans d'autres articles, j'ai vu que les gens recommandaient app.register() qui est maintenant déprécié dans la dernière version.
Réponses
Trop de publicités?Vous pouvez le faire de cette façon :
-
Installez ejs :
npm install ejs
-
Définissez votre moteur de modèle dans app.js comme ejs.
// app.js app.engine('html', require('ejs').renderFile); app.set('view engine', 'html');
-
Maintenant dans votre fichier de route vous pouvez assigner des variables de modèle
// ./routes/index.js exports.index = function(req, res){ res.render('index', { title: 'ejs' });};
-
Ensuite, vous pouvez créer votre vue html dans le répertoire /views.
Jade accepte également les entrées html.
Il suffit d'ajouter un point à la fin de la ligne pour commencer à soumettre du html pur.
Si cela vous convient, essayez :
doctype html
html. // THAT DOT
<body>
<div>Hello, yes this is dog</div>
</body>
PS - Il n'est pas nécessaire de fermer le HTML - cela est fait automatiquement par Jade.
A partir d'express 3, vous pouvez simplement utiliser response.sendFile
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});)
De la référence officielle de l'api express :
res.sendfile(path, [options], [fn]])
Transférer le fichier au chemin donné.
Le champ d'en-tête Content-Type de la réponse est automatiquement défini par défaut en fonction des éléments suivants l'extension du nom de fichier. La fonction de rappel
fn(err)
est invoqué lorsque le transfert est terminé ou lorsqu'une erreur se produit.
Avertissement
res.sendFile
fournit un cache côté client par le biais des en-têtes de cache http, mais il ne met pas en cache le contenu des fichiers côté serveur. Le code ci-dessus va frapper le disque à chaque requête .
À mon avis, utiliser quelque chose d'aussi gros qu'ejs juste pour lire des fichiers html est un peu lourd. Je viens d'écrire mon propre moteur de template pour les fichiers html qui est remarquablement simple. Le fichier ressemble à ceci :
var fs = require('fs');
module.exports = function(path, options, fn){
var cacheLocation = path + ':html';
if(typeof module.exports.cache[cacheLocation] === "string"){
return fn(null, module.exports.cache[cacheLocation]);
}
fs.readFile(path, 'utf8', function(err, data){
if(err) { return fn(err); }
return fn(null, module.exports.cache[cacheLocation] = data);
});
}
module.exports.cache = {};
J'ai appelé le mien htmlEngine, et la façon dont vous l'utilisez est simplement de dire :
app.engine('html', require('./htmlEngine'));
app.set('view engine', 'html');
app.register()
n'a pas été déprécié, il a juste été renommé en app.engine()
depuis Express 3 modifie la façon dont les moteurs de modèles sont gérés .
La compatibilité avec le moteur de template d'Express 2.x nécessitait le module suivant export :
exports.compile = function(templateString, options) { return a Function; };
Les moteurs de modèles Express 3.x doivent exporter les éléments suivants :
exports.__express = function(filename, options, callback) { callback(err, string); };
Si un moteur de modèle n'expose pas cette vous n'avez pas perdu de chance, la méthode
app.engine()
vous permet de de faire correspondre n'importe quelle fonction à une extension. Supposons que vous ayez une bibliothèque markdown et que vous souhaitiez rendre des fichiers .md, mais que cette bibliothèque ne prenne pas en charge la fonction Express, votreapp.engine()
L'appel peut ressembler à quelque chose comme ceci :var markdown = require('some-markdown-library'); var fs = require('fs'); app.engine('md', function(path, options, fn){ fs.readFile(path, 'utf8', function(err, str){ if (err) return fn(err); str = markdown.parse(str).toString(); fn(null, str); }); });
Si vous cherchez un moteur de création de modèles qui vous permette d'utiliser du HTML "simple", je vous recommande doT parce que c'est extrêmement rapide .
Bien sûr, n'oubliez pas que le modèle de vue d'Express 3 laisse la mise en cache des vues à votre discrétion (ou à celle de votre moteur de templating). Dans un environnement de production, vous voudrez probablement mettre en cache vos vues en mémoire afin de ne pas effectuer d'E/S disque à chaque requête.
- Réponses précédentes
- Plus de réponses