Come posso sbarazzarmi di Jade mentre uso Express con Node.JS? Voglio usare solo html semplice. In altri articoli ho visto che le persone consigliavano app.register () che ora è deprecato nell'ultima versione.
Come posso sbarazzarmi di Jade mentre uso Express con Node.JS? Voglio usare solo html semplice. In altri articoli ho visto che le persone consigliavano app.register () che ora è deprecato nell'ultima versione.
Risposte:
Puoi farlo in questo modo:
Installa ejs:
npm install ejs
Imposta il tuo motore di modelli in app.js come ejs
// app.js
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');
Ora nel tuo file di rotta puoi assegnare le variabili del modello
// ./routes/index.js
exports.index = function(req, res){
res.render('index', { title: 'ejs' });};
Quindi puoi creare la tua vista html nella directory / views.
title
nel file html?
Jade accetta anche input html.
Basta aggiungere un punto alla fine della riga per iniziare a inviare html puro.
Se questo fa il trucco per te, prova:
doctype html
html. // THAT DOT
<body>
<div>Hello, yes this is dog</div>
</body>
PS: non c'è bisogno di chiudere l'HTML: è fatto automaticamente da Jade.
response.sendFile
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});)
Dal riferimento api espresso ufficiale :
res.sendfile(path, [options], [fn]])
Trasferisci il file nel percorso indicato.
Imposta automaticamente il campo dell'intestazione della risposta del tipo di contenuto in base all'estensione del nome del file. La richiamata
fn(err)
viene richiamata quando il trasferimento è completo o quando si verifica un errore.
res.sendFile
fornisce la cache lato client tramite le intestazioni della cache http ma non memorizza nella cache il contenuto dei file sul lato server. Il codice sopra colpirà il disco ad ogni richiesta .
sendfile
non consente di eseguire alcun modello poiché invia solo byte da un file. Inoltre, consiglierei di non utilizzare in sendfile
questo modo perché significa che colpirai il disco ogni volta che arriva una richiesta: un enorme collo di bottiglia. Per le pagine ad alto traffico, dovresti davvero fare il caching in memoria.
A mio parere, utilizzare qualcosa di grande come ejs solo per leggere file html è un po 'pesante. Ho appena scritto il mio motore di template per i file html che è straordinariamente semplice. Il file ha questo aspetto:
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 = {};
Ho chiamato il mio htmlEngine e il modo in cui lo usi è semplicemente dicendo:
app.engine('html', require('./htmlEngine'));
app.set('view engine', 'html');
app.register()
non è stato svalutato, è stato semplicemente rinominato in app.engine()
quanto Express 3 cambia il modo in cui vengono gestiti i motori dei modelli .
La compatibilità del motore di modelli Express 2.x richiedeva l'esportazione del seguente modulo:
exports.compile = function(templateString, options) { return a Function; };
I motori di modelli Express 3.x dovrebbero esportare quanto segue:
exports.__express = function(filename, options, callback) { callback(err, string); };
Se un motore di modelli non espone questo metodo, non sei sfortunato, il
app.engine()
metodo ti consente di mappare qualsiasi funzione su un'estensione. Supponiamo di avere una libreria markdown e di voler eseguire il rendering di file .md, ma questa libreria non supporta Express, la tuaapp.engine()
chiamata potrebbe essere simile a questa: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); }); });
Se stai cercando un motore di modelli che ti consenta di utilizzare HTML "semplice", ti consiglio doT perché è estremamente veloce .
Ovviamente, tieni presente che il modello di visualizzazione Express 3 lascia la memorizzazione nella cache della vista a te (o al tuo motore di modelli). In un ambiente di produzione, probabilmente si desidera memorizzare nella cache le visualizzazioni in modo da non eseguire l'I / O del disco a ogni richiesta.
È possibile utilizzare EJS con express i cui modelli sono HTML ma supportano le variabili. Ecco un buon tutorial su come utilizzare EJS in Express.
http://robdodson.me/blog/2012/05/31/how-to-use-ejs-in-express/
Per fare in modo che il motore di rendering accetti html invece di jade puoi seguire i seguenti passaggi;
Installa consolidate e swig nella tua directory.
npm install consolidate
npm install swig
aggiungi le seguenti righe al tuo file 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');
aggiungi i tuoi modelli di visualizzazione come .html nella cartella "visualizzazioni". Riavvia il server del nodo e avvia l'app nel browser.
Sebbene questo renderà html senza alcun problema, ti consiglio di usare JADE imparandolo. Jade è un fantastico motore di modelli e apprenderlo ti aiuterà a ottenere una migliore progettazione e scalabilità.
prima controlla la versione di compatibilità del motore del modello utilizzando la riga sottostante
express -h
quindi non devi usare nessuna vista dall'elenco. seleziona nessuna vista
express --no-view myapp
ora puoi usare tutti i tuoi html, css, js e immagini nella cartella pubblica.
Bene, sembra che tu voglia servire file statici. E c'è una pagina per questo http://expressjs.com/en/starter/static-files.html
Bizzarro che nessuno si colleghi alla documentazione.
Considerando che hai i tuoi percorsi già definiti o sai come farlo.
app.get('*', function(req, res){
res.sendfile('path/to/your/html/file.html');
});
NOTA: questo percorso deve essere posizionato dopo tutti gli altri poiché * accetta tutto.
poiché Jade supporta HTML, se vuoi solo avere .html ext, puoi farlo
// app.js
app.engine('html', require('jade').renderFile);
app.set('view engine', 'html');
quindi devi solo cambiare il file nelle viste da jade a html.
Puoi anche includere direttamente il tuo file html nel tuo file jade
include ../../public/index.html
Risposta originale: Express Generator Without Jade
Se vuoi usare semplice html in nodeJS, senza usare jade .. o altro:
var html = '<div>'
+ 'hello'
+ '</div>';
Personalmente sto bene con quello.
Il vantaggio è la semplicità durante il controllo. Puoi usare alcuni trucchi, come '<p>' + (name || '') + '</p>'
, ternario .. ecc
Se vuoi un codice rientrato nel browser, puoi fare:
+ 'ok \
my friend \
sldkfjlsdkjf';
e usa \ t o \ n a piacimento. Ma preferisco senza, in più è più veloce.