Comment me débarrasser de Jade en utilisant Express avec Node.JS? Je veux simplement utiliser du HTML. Dans d'autres articles, j'ai vu que les gens recommandaient app.register () qui est maintenant obsolète dans la dernière version.
Comment me débarrasser de Jade en utilisant Express avec Node.JS? Je veux simplement utiliser du HTML. Dans d'autres articles, j'ai vu que les gens recommandaient app.register () qui est maintenant obsolète dans la dernière version.
Réponses:
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 d'itinéraire, vous pouvez attribuer 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.
title
dans un fichier html?
Jade accepte également les entrées html.
Ajoutez simplement 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 - Pas besoin de fermer HTML - c'est fait automatiquement par Jade.
response.sendFile
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});)
À partir de la référence officielle de l'API express :
res.sendfile(path, [options], [fn]])
Transférez le fichier au chemin indiqué.
Par défaut, le champ d'en-tête de réponse Content-Type est automatiquement basé sur l'extension du nom de fichier. Le rappel
fn(err)
est appelé lorsque le transfert est terminé ou lorsqu'une erreur se produit.
res.sendFile
fournit un cache côté client via les en-têtes de cache http mais il ne met pas en cache le contenu des fichiers côté serveur. Le code ci-dessus frappera le disque à chaque demande .
sendfile
ne vous permet pas de créer des modèles car il envoie simplement des octets à partir d'un fichier. De plus, je recommanderais de ne pas utiliser sendfile
ce type d' utilisation, car cela signifie que vous frapperez le disque à chaque fois qu'une demande arrive - un énorme goulot d'étranglement. Pour les pages à fort trafic, vous devez vraiment faire de la mise en cache en mémoire.
À mon avis, utiliser quelque chose d'aussi gros que des 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 en disant:
app.engine('html', require('./htmlEngine'));
app.set('view engine', 'html');
app.register()
n'a pas été déprécié, il vient d'être renommé app.engine()
depuis qu'Express 3 change la façon dont les moteurs de modèles sont gérés .
La compatibilité du moteur de modèle Express 2.x nécessitait l'exportation de module suivant:
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 méthode, vous n'êtes pas sans chance, la
app.engine()
méthode vous permet de mapper n'importe quelle fonction à une extension. Supposons que vous ayez une bibliothèque Markdown et que vous vouliez rendre les fichiers .md, mais que cette bibliothèque ne prenait pas en charge Express, votreapp.engine()
appel peut ressembler à 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 recherchez un moteur de création de modèles qui vous permet d'utiliser du HTML `` simple '', je recommande doT car il est extrêmement rapide .
Bien sûr, gardez à l'esprit que le modèle de vue Express 3 vous laisse la mise en cache de la vue (ou à votre moteur de création de modèles). Dans un environnement de production, vous souhaitez probablement mettre en cache vos vues en mémoire afin de ne pas effectuer d'E / S disque à chaque demande.
Vous pouvez utiliser EJS avec express quels modèles sont HTML mais prennent en charge les variables. Voici un bon tutoriel sur la façon d'utiliser EJS dans express.
http://robdodson.me/blog/2012/05/31/how-to-use-ejs-in-express/
Pour que le moteur de rendu accepte html au lieu de jade, vous pouvez suivre les étapes suivantes;
Installez consolider et swig dans votre répertoire.
npm install consolidate
npm install swig
ajoutez les lignes suivantes à votre fichier app.js
var cons = require('consolidate');
// view engine setup
app.engine('html', cons.swig)
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', ‘html');
ajoutez vos modèles de vues au format .html dans le dossier «vues». Redémarrez votre serveur de nœuds et démarrez l'application dans le navigateur.
Bien que cela rendra html sans aucun problème, je vous recommande d'utiliser JADE en l'apprenant. Jade est un moteur de modèle incroyable et apprendre cela vous aidera à obtenir une meilleure conception et une meilleure évolutivité.
vérifiez d'abord la version de compatibilité du moteur de modèle en utilisant la ligne ci-dessous
express -h
alors vous ne devez utiliser aucune vue de la liste. sélectionner aucune vue
express --no-view myapp
maintenant vous pouvez utiliser tous vos html, css, js et images dans un dossier public.
Eh bien, il semble que vous vouliez servir des fichiers statiques. Et il y a une page pour cela http://expressjs.com/en/starter/static-files.html
Bizarre que personne ne se connecte à la documentation.
Considérant que vos itinéraires sont déjà définis ou que vous savez comment le faire.
app.get('*', function(req, res){
res.sendfile('path/to/your/html/file.html');
});
NOTE: cette route doit être placée après toutes les autres puisque * accepte tout.
puisque Jade prend en charge HTML, si vous voulez juste avoir .html ext, vous pouvez le faire
// app.js
app.engine('html', require('jade').renderFile);
app.set('view engine', 'html');
alors vous changez simplement de fichier dans les vues de jade à html.
Vous pouvez également inclure directement votre fichier html dans votre fichier jade
include ../../public/index.html
Réponse originale: Générateur express sans jade
Si vous voulez utiliser du HTML brut dans nodeJS, sans utiliser de jade .. ou autre:
var html = '<div>'
+ 'hello'
+ '</div>';
Personnellement, je me débrouille bien avec ça.
L'avantage est la simplicité lors du contrôle. Vous pouvez utiliser quelques astuces, comme '<p>' + (name || '') + '</p>'
, ternaire .. etc.
Si vous voulez un code en retrait dans le navigateur, vous pouvez faire:
+ 'ok \
my friend \
sldkfjlsdkjf';
et utilisez \ t ou \ n à volonté. Mais je préfère sans, en plus c'est plus rapide.