108 votes

Utiliser le HTML dans Express au lieu de Jade

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.

82voto

Biwek Points 81

Vous pouvez le faire de cette façon :

  1. Installez ejs :

    npm install ejs
  2. 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');
  3. 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' });};
  4. Ensuite, vous pouvez créer votre vue html dans le répertoire /views.

63voto

Martin Sookael Points 219

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.

19voto

laconbass Points 2058

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 .

16voto

kevin.groat Points 134

À 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');

10voto

josh3736 Points 41911

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, votre app.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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X