Estoy tratando de averiguar cómo cargar y renderizar un archivo HTML básico para no tener que escribir código como:
response.write('...<p>blahblahblah</p>...');
Acabo de encontrar una manera de usar la biblioteca fs . Sin embargo, no estoy seguro de si es el más limpio.
var http = require('http'),
fs = require('fs');
fs.readFile('./index.html', function (err, html) {
if (err) {
throw err;
}
http.createServer(function(request, response) {
response.writeHeader(200, {"Content-Type": "text/html"});
response.write(html);
response.end();
}).listen(8000);
});
El concepto básico es solo leer archivos sin procesar y descargar los contenidos. Sin embargo, todavía estoy abierto a opciones más limpias.
sys = require('util')
no es necesario ya que no se imprime nada en la consola.fs.readFile
podría colocarse dentro de la llamada ahttp.createServer
, permitiendo manejar el error. Use la respuesta de Stephen conif (err) { console.log('something bad'); return res.end('Oops! Something bad happened.');}
Lareturn
declaración es lo simple que los nuevos usuarios pueden pasar por alto.use app.get para obtener el archivo html. ¡¡es sencillo!!
Es tan simple como eso. Para esto utiliza el módulo express. Instalar express:
npm install express -g
fuente
express
.var express = require('express'); var app = express();
npm install express --save
lugar de -gPuede hacer eco de archivos manualmente usando el objeto fs, pero le recomiendo usar el framework ExpressJS para hacer su vida mucho más fácil.
... Pero si insistes en hacerlo de la manera difícil:
fuente
Sé que esta es una vieja pregunta, pero como nadie la ha mencionado, pensé que valía la pena agregarla:
Si literalmente quiere servir contenido estático (digamos una página 'acerca de', imagen, css, etc.) puede usar uno de los módulos de servicio de contenido estático, por ejemplo, nodo-estático. (Hay otros que pueden ser mejores / peores, intente search.npmjs.org.) Con un poco de preprocesamiento, puede filtrar las páginas dinámicas de la estática y enviarlas al controlador de solicitudes correcto.
fuente
Probablemente esto sea mejor, ya que transmitirá los archivos en lugar de cargarlos en la memoria como fs.readFile.
fuente
Esta es una actualización de la respuesta de Muhammed Neswine
En Express 4.x, sendfile ha quedado en desuso y se debe utilizar la función sendFile . La diferencia es que sendfile toma la ruta relativa y sendFile toma la ruta absoluta. Entonces, __dirname se usa para evitar codificar la ruta.
fuente
Es una forma más flexible y sencilla de usar el
pipe
método.fuente
La mejor manera que aprendí es usar express con archivos html, ya que express ofrece muchas ventajas. También puede extenderlo a una plataforma Heroku si lo desea ... Solo diciendo :)
Limpio y mejor ... !!!
fuente
La forma fácil de hacerlo es colocar todos sus archivos, incluido index.html o algo con todos los recursos como CSS, JS, etc. en una carpeta pública o puede nombrarlo como desee y ahora puede usar express js y simplemente decirle a la aplicación usar el _dirname como:
En su server.js usando express agregue estos
y si desea tener un directorio separado, agregue un nuevo directorio en el directorio público y use esa ruta "/ public / YourDirName"
Entonces, ¿qué estamos haciendo aquí exactamente? estamos creando una instancia expresa llamada aplicación y estamos dando la dirección del directorio público para acceder a todos los recursos. Espero que esto ayude !
fuente
¿Qué tal el uso del módulo express?
entonces, puede usar el navegador para obtener / localhost: 8000
fuente
fuente
response.writeHeader()
, sino más bienresponse.writeHead()
.response.writeHeader()
yresponse.writeHead()
ambos son válidosCreo que esta sería una mejor opción, ya que muestra la URL que ejecuta el servidor:
fuente
También puedes usar este fragmento:
fuente
Es realmente simple si usas tubería. El siguiente es el fragmento de código server.js.
fuente
../
. Si no hiciéramos nada más que cambiar__dirname + "/index.html'
a algo como__dirname + requestedPageFromHeader
, creo que el código resultante tendría esta vulnerabilidad. Los caracteres de ruta de directorio como~
estarán bien siempre que incluya el__dirname +
- si el usuario puede determinar el inicio de la ruta, también deberá verificarlos.Sé que esta es una vieja pregunta: aquí hay una sencilla utilidad de servidor de archivos si prefiere no usar connect o express; sino más bien el módulo http.
fuente
usar ejs en lugar de jade
npm install ejs
app.js
./routes/index.js
fuente
Esta es una pregunta bastante antigua ... pero si su caso de uso aquí es simplemente enviar una página HTML particular al navegador de manera ad hoc, usaría algo simple como esto:
fuente
podemos cargar el documento html con el marco de trabajo de conexión. He colocado mi documento html y las imágenes relacionadas en la carpeta pública de mi proyecto donde se encuentran los siguientes módulos de código y nodo.
He probado el método readFile () de fs, pero no puede cargar las imágenes, por eso he usado el marco de conexión.
fuente
https://gist.github.com/xgqfrms-GitHub/7697d5975bdffe8d474ac19ef906e906
¡Aquí están mis códigos de demostración simples para los archivos HTML estáticos del host usando el servidor Express!
Espero que te ayude!
fuente