Estoy tratando de configurar un sitio de plantilla usando Node.JS. Soy nuevo en el uso de Node.JS y estoy tratando de abrir un archivo HTML y un archivo CSS antes de continuar con el resto del código. Sin embargo, incluso al llegar a reponse.end(), el ciclo continúa ejecutándose y, de hecho, continúa por segunda vez, pero no llega al final nuevamente. Lancé algunos console.log()s para demostrar esto. Lanzaré tanto mi código JS como la salida de la consola de modo a continuación. No sé cómo solucionar esto, y cualquier ayuda sería apreciada. ¡Muchas gracias a todos!
const server = require('http').createServer() const markdown = require( "markdown" ).markdown const fs = require('fs') server.on('request', (request, response) => { response.setHeader('Content-Type', 'text/html') var page = fs.readFileSync("html/tb.html", 'utf8') console.log("reading html...") page+= "<style>"+fs.readFileSync("css/style.css", 'utf8')+"</style>" console.log("reading css...") const lang = Intl.DateTimeFormat().resolvedOptions().locale if (request.url === '/') { response.end() } else if (request.url === '/coucou') { page+=markdown.toHTML('#Hello world!') response.end(page) console.log("end") } }) server.listen(4000)Lamento mi falta de experiencia en NodeJS, pero parece que no pude encontrar una respuesta a esta pregunta en ningún otro lugar. Aquí está la salida de mi consola al cargar 'coucou':
reading html... reading css... end reading html... reading css...Y aquí está en la página de inicio.
reading html... reading css... reading html... reading css...No continúa después de la segunda ronda, pero el navegador nunca recibe una señal de finalización y, por lo tanto, continúa cargándose indefinidamente. ¿Cómo hago para que realmente procese el final de la respuesta y le diga a mi navegador que deje de cargar?
De nuevo, muchas gracias a todos!!!
Agregue lo siguiente a su secuencia de comandos:
if (request.url === '/') { response.end() } else if (request.url === '/coucou') { page+=markdown.toHTML('#Hello world!') response.end(page) console.log("end") } else { console.log("No response for "+request.url); }La salida del registro debería explicar lo que está sucediendo: hay un tercer caso en el que nunca terminaste la respuesta.
Una mirada en el panel de red de las herramientas de desarrollo de su navegador también le mostrará qué solicitud aún está pendiente sin una respuesta completa.
Lo más probable es que sea el favicon que un navegador solicita de forma predeterminada. El contenido de la página se habrá cargado, pero la barra de estado aún mostrará "cargando". Como sugiere @jfriend, use
response.status(404).end();en el bloqueelse
Intenté cambiar los response.end() en los bloques if-else a response.write() y puse un solo response.end() después del bloque condicional de esta manera.
if (request.url === '/') { response.write(page) } else if (request.url === '/coucou') { page+=markdown.toHTML('#Hello world!') response.write(page) console.log("end") } response.end()¡Eso parecía haber funcionado! Muchas gracias a todos en cualquier caso!