Pregunta Mi http.createserver en node.js no funciona?


Hola chicos, acabo de empezar a aprender node.js hoy y buscar un montón de cosas en Internet, luego trato de codificar en node.js. Utilizo estos dos códigos para mostrarme el mismo resultado, pero el último es mostrar el error en mi navegador. algo le gusta "no puedo encontrar la página". Así que por favor, explícame por qué?

// JScript source code
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello World\n');
}).listen(1337, "127.0.0.1");
console.log('Server running at http://127.0.0.1:1337/');

Esto está funcionando, pero

// Include http module.
var http = require("http");

// Create the server. Function passed as parameter is called on every request made.
// request variable holds all request parameters
// response variable allows you to do anything with response sent to the client.
http.createServer(function (request, response) {
   // Attach listener on end event.
   // This event is called when client sent all data and is waiting for response.
   request.on("end", function () {
      // Write headers to the response.
      // 200 is HTTP status code (this one means success)
      // Second parameter holds header fields in object
      // We are sending plain text, so Content-Type should be text/plain
      response.writeHead(200, {
         'Content-Type': 'text/plain'
      });
      // Send data and end response.
      response.end('Hello HTTP!');
   });

}).listen(1337, "127.0.0.1");

Este no funciona

¿Por qué?

El enlace del último que no funciona http://net.tutsplus.com/tutorials/javascript-ajax/node-js-for-beginners/ Gracias por todas las respuestas, pero todavía no entiendo sobre los problemas. el último que no funciona solo tiene request.on?


11
2017-10-14 15:13


origen


Respuestas:


request es una instancia de http.IncomingMessage, que implementa el stream.Readable interfaz.

Documentación en http://nodejs.org/api/stream.html#stream_event_end dice:

Evento: 'final'

Este evento se dispara cuando no se proporcionarán más datos.

Tenga en cuenta que el evento final no se activará a menos que los datos se consuman por completo. Esto se puede hacer cambiando al modo de flujo o llamando read() repetidamente hasta llegar al final.

var readable = getReadableStreamSomehow();
readable.on('data', function(chunk) {
  console.log('got %d bytes of data', chunk.length);
})
readable.on('end', function() {
  console.log('there will be no more data.');
});

Entonces en tu caso, porque no usas ninguno read() o suscribirse a la data evento, el end el evento nunca se disparará.

Añadiendo

 request.on("data",function() {}) // a noop

dentro del evento, el oyente probablemente haga que el código funcione.

Tenga en cuenta que usar el objeto de solicitud como una secuencia solo es necesario para cuando la solicitud HTTP tiene un cuerpo. P.ej. para solicitudes PUT y POST. De lo contrario, puede considerar que la solicitud ya terminó, y solo envíe los datos.

Si el código de su publicación se toma literalmente de otro sitio, es posible que este ejemplo de código se haya basado en el Nodo 0.8. En el Nodo 0.10, ha habido cambios en cómo funcionan las transmisiones.

De http://blog.nodejs.org/2012/12/20/streams2/

ADVERTENCIA: si nunca agrega un manejador de eventos 'data' o call resume (), se quedará en pausa para siempre y nunca emitirá 'end'.   Entonces, el código que publicaste habría funcionado en el Nodo 0.8.x, pero no en el Nodo 0.10.x.


12
2017-10-14 19:17



La función que está aplicando al servidor HTTP es la requestListener que proporciona dos argumentos, requesty response, que son instancias respectivamente de http.IncomingMessage y http.ServerResponse.

La clase http.IncomingMessage hereda el end evento de la secuencia legible subyacente. La secuencia legible no está en modo de flujo, por lo que el evento final nunca se dispara y, por lo tanto, la respuesta nunca se escribe. Como la respuesta ya puede escribirse cuando se ejecuta el controlador de solicitud, puede escribir directamente la respuesta.

var http = require('http');

http.createServer(function(req, res) {
  res.writeHead(200, {
    'Content-Type': 'text/plain'
  });
  res.end('Hello HTTP!');
}).listen();

10
2017-10-14 15:25



Preguntas populares