Tengo una aplicación básica de node.js que intento despegar usando Express Framework. Tengo una views
carpeta donde tengo un index.html
archivo. Pero recibo el siguiente error al cargar el navegador web.
Error: no se puede encontrar el módulo 'html'
Abajo está mi código.
var express = require('express');
var app = express.createServer();
app.use(express.staticProvider(__dirname + '/public'));
app.get('/', function(req, res) {
res.render('index.html');
});
app.listen(8080, '127.0.0.1')
¿Que me estoy perdiendo aqui?
Muchas de estas respuestas están desactualizadas.
Usando express 3.0.0 y 3.1.0, funciona lo siguiente:
Consulte los comentarios a continuación para obtener una sintaxis alternativa y advertencias para express 3.4+:
Entonces puedes hacer algo como:
Esto supone que tiene sus vistas en la
views
subcarpeta y que ha instalado elejs
módulo de nodo. De lo contrario, ejecute lo siguiente en una consola Node:fuente
De la Guía Express.js: Ver representación
Entonces, o creas tu propio renderizador simple o simplemente usas jade:
Más acerca
app.register
.fuente
app.engine('.html', require('ejs').renderFile);
También puede leer el archivo HTML y enviarlo:
fuente
prueba esto. esto funciona para mi.
fuente
app.register
. ¿Quizás ha quedado en desuso en express 3.0.0.rc3?TypeError: Object function app(req, res){ app.handle(req, res); } has no method 'register'
fuente
Si está utilizando express@~3.0.0, cambie la línea a continuación de su ejemplo:
a algo como esto:
Lo hice como se describe en la página api express y funciona a las mil maravillas. Con esa configuración, no tiene que escribir código adicional, por lo que es bastante fácil de usar para su microproducción o prueba.
Código completo listado a continuación:
fuente
app.use(express.static(__dirname + '/public'));
después de iniciar el servidor conapp.listen
?También enfrenté el mismo problema en
express 3.X
ynode 0.6.16
. La solución dada anteriormente no funcionará para la última versiónexpress 3.x
. Quitaron elapp.register
método y el método agregadoapp.engine
. Si probó la solución anterior, puede terminar con el siguiente error.Para deshacerse del mensaje de error. Agregue la siguiente línea a su
app.configure function
Nota: tienes que instalar el
ejs
motor de plantillasEjemplo:
Nota: La solución más simple es usar la plantilla ejs como motor de vista. Allí puede escribir HTML sin formato en archivos de vista * .ejs.
fuente
ejs
globalmente?estructura de carpetas:
server.js
index.html
salida:
Hola Mundo
fuente
Si no tiene que usar el directorio de vistas , simplemente mueva los archivos html al directorio público a continuación.
y luego, agregue esta línea en app.configure en lugar de '/ views'.
fuente
Para representar la página HTML en el nodo, intente lo siguiente,
Necesita instalar el
ejs
módulo a través denpm
como:fuente
Para mi proyecto, he creado esta estructura:
Este código sirve index.html para
/
solicitudes y reset.css para/css/reset.css
solicitudes. Suficientemente simple, y la mejor parte es que agrega automáticamente encabezados de caché .fuente
1) La mejor manera es configurar una carpeta estática. En su archivo principal (app.js | server.js | ???):
public / css / form.html
public / css / style.css
Luego tienes el archivo estático de la carpeta "pública":
2)
Puedes crear tu caché de archivos.
Utilice el método fs.readFileSync
fuente
Con Express 4.0.0, lo único que tiene que hacer es comentar 2 líneas en app.js:
Y luego suelte su archivo estático en el directorio / public. Ejemplo: /public/index.html
fuente
Agregué debajo de la línea 2 y funciona para mí
fuente
npm install ejs --save
en su directorio de trabajo.Pruebe la función res.sendFile () en rutas Express.
Lea aquí: http://codeforgeek.com/2015/01/render-html-file-expressjs/
fuente
No quería depender de ejs para simplemente entregar un archivo HTML, así que simplemente escribí el pequeño renderizador:
fuente
Intenté configurar una aplicación angular con una API RESTful exprés y aterricé en esta página varias veces, aunque no fue útil. Esto es lo que encontré que funcionó:
Luego, en la devolución de llamada para sus rutas de API se ven así:
res.jsonp(users);
Su marco del lado del cliente puede manejar el enrutamiento. Express es para servir a la API.
Mi ruta local se ve así:
fuente
fuente
¡Aquí hay una demostración completa del archivo del servidor express!
https://gist.github.com/xgqfrms-GitHub/7697d5975bdffe8d474ac19ef906e906
Espero que te ayude!
fuente
Agregue las siguientes líneas a su código
Reemplace "jade" con "ejs" y "XYZ" (versión) con "*" en el archivo package.json
Luego, en su archivo app.js, agregue el siguiente código:
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');
Y recuerde mantener todos los archivos .HTML en la carpeta de vistas
Salud :)
fuente
Para html simple, no necesita ningún paquete npm o middleware
solo usa esto:
fuente
Es muy triste que sea alrededor de 2020 y todavía express no haya agregado una forma de representar una página HTML sin usar el
sendFile
método delresponse
objeto. UsarsendFile
no es un problema, pero pasar un argumento en forma depath.join(__dirname, 'relative/path/to/file')
no parece correcto. ¿Por qué debería un usuario unirse__dirname
a la ruta del archivo? Debe hacerse por defecto. ¿Por qué la raíz del servidor no puede ser desactivando el directorio del proyecto? Además, instalar una dependencia de plantillas solo para representar un archivo HTML estático no es correcto nuevamente. No sé la forma correcta de abordar el problema, pero si tuviera que servir un HTML estático, entonces haría algo como:El ejemplo anterior supone que la estructura del proyecto tiene un
views
directorio y que los archivos HTML estáticos están dentro de él. Por ejemplo, digamos, elviews
directorio tiene dos archivos HTML nombradosindex.html
yabout.html
, para acceder a ellos, podemos visitar:localhost:8153/index.html
o simplementelocalhost:8153/
para cargar laindex.html
página ylocalhost:8153/about.html
cargar el archivoabout.html
. Podemos usar un enfoque similar para servir una aplicación de reacción / angular almacenando los artefactos en elviews
directorio o simplemente usando eldist/<project-name>
directorio predeterminado y configúrelo en el servidor js de la siguiente manera:fuente
Quería permitir que las solicitudes a "/" sean manejadas por una ruta Express donde previamente habían sido manejadas por el middleware estático. Esto me permitiría renderizar la versión normal de index.html o una versión que cargara JS y CSS concatenados + minificados, dependiendo de la configuración de la aplicación. Inspirado por la respuesta de Andrew Homeyer , decidí arrastrar mis archivos HTML, sin modificar, a una carpeta de vistas, configurar Express así
Y creó un controlador de ruta así
Esto funcionó bastante bien.
fuente
En server.js, incluya
fuente
Si está tratando de servir un archivo HTML que YA tiene todo su contenido dentro, entonces no necesita ser 'renderizado', solo necesita ser 'servido'. La representación se produce cuando el servidor actualiza o inyecta contenido antes de enviar la página al navegador, y requiere dependencias adicionales como ejs, como muestran las otras respuestas.
Si simplemente desea dirigir el navegador a un archivo en función de su solicitud, debe usar res.sendFile () de esta manera:
De esta manera, no necesita dependencias adicionales además de express. Si solo desea que el servidor envíe sus archivos html ya creados, lo anterior es una forma muy ligera de hacerlo.
fuente
Pon tu archivo index.html en una carpeta pública
Ahora ejecuta el siguiente código en tu terminal
fuente
Usualmente uso esto
Solo tenga cuidado porque eso compartirá cualquier cosa en el directorio / web.
Espero que ayude
fuente
si está utilizando express framework para node.js
instalar npm ejs
luego agregue el archivo de configuración
;
renderice la página desde el módulo de exportaciones form.js tenga el archivo html en el directorio de vistas con la extensión del nombre del archivo ejs como
form.html.ejs
luego crea el form.js
res.render('form.html.ejs');
fuente