¿Cómo puedo deshacerme de Jade mientras uso Express con Node.JS? Solo quiero usar html simple. En otros artículos, he visto que la gente recomendaba app.register (), que ahora está obsoleto en la última versión.
¿Cómo puedo deshacerme de Jade mientras uso Express con Node.JS? Solo quiero usar html simple. En otros artículos, he visto que la gente recomendaba app.register (), que ahora está obsoleto en la última versión.
Respuestas:
Puedes hacerlo de esta manera:
Instalar ejs:
npm install ejs
Configure su motor de plantillas 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.
title
en un archivo html?
Jade también acepta entrada HTML.
Simplemente agregue un punto al final de la línea para comenzar a enviar html puro.
Si eso funciona para usted, intente:
doctype html
html. // THAT DOT
<body>
<div>Hello, yes this is dog</div>
</body>
PD: no es necesario cerrar HTML, eso lo hace automáticamente Jade.
response.sendFile
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});)
De la referencia oficial de la api express :
res.sendfile(path, [options], [fn]])
Transfiera el archivo en la ruta indicada.
Configura automáticamente el campo de encabezado de respuesta Content-Type según la extensión del nombre de archivo. La devolución de llamada
fn(err)
se invoca cuando se completa la transferencia o cuando se produce un error.
res.sendFile
proporciona caché del lado del cliente a través de encabezados de caché http pero no almacena en caché el contenido del archivo en el lado del servidor. El código anterior llegará al disco en cada solicitud .
sendfile
no le permite hacer ninguna plantilla, ya que solo envía bytes desde un archivo. Además, recomendaría no usarlo de sendfile
esta manera porque significa que golpeará el disco cada vez que ingrese una solicitud, un gran cuello de botella. Para páginas de alto tráfico, realmente debería hacer un almacenamiento en caché en memoria.
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 tiene este aspecto:
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é al mío htmlEngine, y la forma en que lo usa es simplemente diciendo:
app.engine('html', require('./htmlEngine'));
app.set('view engine', 'html');
app.register()
no se ha depreciado, simplemente se le ha cambiado el nombre a app.engine()
desde que Express 3 cambia la forma en que se manejan los motores de plantilla .
La compatibilidad del motor de plantilla Express 2.x requería la siguiente exportación de módulo:
exports.compile = function(templateString, options) { return a Function; };
Los motores de plantilla Express 3.x deben exportar lo siguiente:
exports.__express = function(filename, options, callback) { callback(err, string); };
Si un motor de plantillas no expone este método, no tiene suerte, el
app.engine()
método le permite asignar cualquier función a una extensión. Suponga que tiene una biblioteca de rebajas y desea renderizar archivos .md, pero esta biblioteca no es compatible con Express, suapp.engine()
llamada puede verse 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", le recomiendo doT porque es extremadamente rápido .
Por supuesto, tenga en cuenta que el modelo de vista Express 3 deja la vista en caché para usted (o su motor de plantillas). En un entorno de producción, probablemente desee almacenar en caché sus vistas en la memoria para no realizar E / S de disco en cada solicitud.
Puede usar EJS con express qué plantillas son HTML pero soportan variables. Aquí hay un buen tutorial sobre cómo usar EJS en express.
http://robdodson.me/blog/2012/05/31/how-to-use-ejs-in-express/
Para hacer 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 renderizará html sin ningún problema, le recomendaría que use JADE aprendiéndolo. Jade es un motor de plantillas increíble y aprender esto te ayudará a lograr un mejor diseño y escalabilidad.
Primero verifique la versión de compatibilidad del motor de plantilla usando la línea de abajo
express -h
entonces no tiene que usar ninguna vista de la lista, seleccione ninguna vista
express --no-view myapp
ahora puede usar todos sus html, css, js e imágenes en la carpeta pública.
Bueno, parece que quieres servir archivos estáticos. Y hay una página para eso http://expressjs.com/en/starter/static-files.html
Es extraño que nadie se vincule a la documentación.
Teniendo en cuenta que ya tienes tus rutas definidas o sabes 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 desea tener .html ext, puede hacer esto
// app.js
app.engine('html', require('jade').renderFile);
app.set('view engine', 'html');
luego simplemente cambia el archivo en las vistas de jade a html.
También puede incluir directamente su archivo html en su archivo jade
include ../../public/index.html
Respuesta original: Generador Express sin Jade
Si desea usar html simple en nodeJS, sin usar jade .. o lo que sea:
var html = '<div>'
+ 'hello'
+ '</div>';
Personalmente estoy bien con eso.
La ventaja es la sencillez a la hora de controlar. Puedes usar algunos trucos, como '<p>' + (name || '') + '</p>'
ternario, etc.
Si desea un código sangrado en el navegador, puede hacer lo siguiente:
+ 'ok \
my friend \
sldkfjlsdkjf';
y use \ t o \ n a voluntad. Pero prefiero sin, además es más rápido.