style - Usar HTML en Express en lugar de Jade
script tag on pug (12)
¿Cómo me deshago de Jade mientras uso Express con Node.JS? Solo quiero usar html simple. En otros artículos, he visto que las personas recomendaban la aplicación.register (), que ahora está en desuso en la última versión.
A partir del expreso 3, simplemente puede usar response.sendFile
app.get(''/'', function (req, res) {
res.sendfile(__dirname + ''/index.html'');
});)
De la referencia oficial api express :
res.sendfile(path, [options], [fn]])
Transfiere el archivo a la ruta dada.
Establece automáticamente el campo de encabezado de respuesta de Tipo de contenido basado en la extensión del nombre de archivo. La devolución de llamada
fn(err)
se invoca cuando la transferencia se completa o cuando ocurre un error.
Advertencia
res.sendFile
proporciona caché del lado del cliente a través de los encabezados de caché http, pero no almacena los contenidos de los archivos en el servidor. El código anterior golpeará el disco en cada solicitud .
Bueno, parece que quieres servir archivos estáticos. Y hay una página para eso http://expressjs.com/en/starter/static-files.html
Extraño que nadie está vinculando a la documentación.
En mi opinión, usar algo tan grande como ejs solo para leer archivos html es un poco torpe. Acabo de escribir mi propio motor de plantillas para archivos html que es notablemente simple. El archivo se ve así:
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 = {};
Llamé a mi htmlEngine, y la forma en que lo usas es simplemente diciendo:
app.engine(''html'', require(''./htmlEngine''));
app.set(''view engine'', ''html'');
Jade también acepta la entrada html.
Simplemente agregue un punto al final de la línea para comenzar a enviar html puro.
Si eso te sirve, intenta:
doctype html
html. // THAT DOT
<body>
<div>Hello, yes this is dog</div>
</body>
PD: no es necesario cerrar HTML; Jade lo hace de forma automática.
Para que el motor de renderizado acepte html en lugar de jade, puede seguir los siguientes pasos;
Instale consolidate y swig en su directorio.
npm install consolidate npm install swig
agregue las siguientes líneas a su archivo 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'');
agregue sus plantillas de vista como .html dentro de la carpeta "vistas". Reinicie su servidor de nodo e inicie la aplicación en el navegador.
Aunque esto representará html sin ningún problema, le recomendaría usar JADE aprendiéndolo. Jade es un motor de plantillas increíble y aprender esto lo ayudará a lograr un mejor diseño y escalabilidad.
Puede usar EJS con expresar qué plantillas son HTML pero variables de soporte. Aquí hay un buen tutorial sobre cómo usar EJS en expreso.
http://robdodson.me/blog/2012/05/31/how-to-use-ejs-in-express/
Puedes hacerlo de esta manera:
Instalar ejs:
npm install ejs
Configure su motor de plantilla en app.js como ejs
// app.js app.engine(''html'', require(''ejs'').renderFile); app.set(''view engine'', ''html'');
Ahora en su archivo de ruta puede asignar variables de plantilla
// ./routes/index.js exports.index = function(req, res){ res.render(''index'', { title: ''ejs'' });};
Luego puede crear su vista html en el directorio / views.
Si quieres usar html simple en nodeJS, sin usar jade ... o lo que sea:
var html = ''<div>''
+ ''hello''
+ ''</div>'';
Personnaly, estoy bien con eso.
La ventaja es la simplicidad cuando se controla. Puedes usar algunos trucos, como ''<p>'' + (name || '''') + ''</p>''
, ternary ... etc.
Si desea un código sangrado en el navegador, puede hacer:
+ ''ok /
my friend /
sldkfjlsdkjf'';
y use / t o / n a voluntad. Pero prefiero sin, además, es más rápido.
También puede incluir directamente su archivo html en su archivo de jade
include ../../public/index.html
Respuesta original: Express Generator Without Jade
Teniendo en cuenta que ya tiene definidas sus rutas o sabe cómo hacerlo.
app.get(''*'', function(req, res){
res.sendfile(''path/to/your/html/file.html'');
});
NOTA: esta ruta debe colocarse después de todas las demás ya que * acepta todo.
dado que Jade admite HTML, si solo quieres tener .html ext, puedes hacer esto
// app.js
app.engine(''html'', require(''jade'').renderFile);
app.set(''view engine'', ''html'');
entonces solo cambias el archivo en vistas desde jade a html.
app.register()
no se ha depreciado, acaba de renombrarse como app.engine()
ya que Express 3 cambia la forma en que se manejan los motores de plantillas .
La compatibilidad del motor de plantilla Express 2.x requiere la siguiente exportación de módulo:
exports.compile = function(templateString, options) { return a Function; };
Los motores de plantillas Express 3.x deberían exportar lo siguiente:
exports.__express = function(filename, options, callback) { callback(err, string); };
Si un motor de plantillas no expone este método, no está de suerte, el método
app.engine()
permite asignar cualquier función a una extensión. Supongamos que tiene una biblioteca de descuentos y desea generar archivos .md, pero esta biblioteca no admite Express, su llamada aapp.engine()
puede verse más o menos así:
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 está buscando un motor de plantillas que le permita usar HTML ''simple'', recomiendo doT porque es extremadamente rápido .
Por supuesto, tenga en cuenta que el modelo de vista Express 3 deja el almacenamiento en caché para usted (o su motor de plantillas). En un entorno de producción, es probable que desee almacenar sus vistas en la memoria caché para que no esté realizando E / S de disco en cada solicitud.