2011-07-07 27 views
12

Tengo un cliente que está enviando fragmentos de datos a mi servidor Node.js.Node.js HTTP: evento 'fin' solicitud nunca se llama

que desea escuchar en el evento "extremo" y recuperar el cuerpo de la petición acumulada.

Aquí está mi código:

app.post('/users', function(req, res){ 

    req.on('end', function() { // WHY IS THIS NEVER FIRED? 
    console.log(req.body); 

    res.send({ 
     "status": "ok" 
    }); 

    }); 

}); 

El problema es que el evento 'fin' no se dispara.

Cualquiera sabe por qué?

También, si lo hago de esta manera, será el req.body ser el cuerpo acumulado de todos los trozos del cuerpo?

Respuesta

2

Básicamente http único puesto incendios cuando se publique en el servidor. No puedo estar seguro, pero supongo que solo está intentando visitar server:port/users en su navegador web y no puede obtener una respuesta. Por defecto, el navegador web es GET en el servidor. Para solucionar esto, tienes dos opciones.

1. Si cambia app.post a app.get el evento se disparará correctamente cuando visita /users

2. O puede disparar la función de entrada mediante un formulario. Por ejemplo, el siguiente código mostrará un formulario si visita la página usando GET. Cuando envíe el formulario, se activará el POST.

var express = require('express'), 
    app = express.createServer(); 

app.listen(1337, "127.0.0.1"); 

app.get('/users',function(req,res){ 
    res.send('<form method="post" action="/users"><input type="submit" value="Submit" /></form>'); 
}) 

app.post('/users', function(req, res){ 
    req.on('end', function() { 
    console.log('success'); 
    res.send('success!!!'); 
    }); 
}); 
+2

Usted está malentendido. El cliente está ejecutando una solicitud POST. Se ejecuta el controlador POST, el problema es que el evento 'final' no se activa y no tengo idea de por qué. – ajsie

+0

Funciona para mí, intenta reinstalar node.js. Hice mi mejor intento por la situación. El primer código que publicó también funciona para mí siempre que publique correctamente en la página. Podría por favor hacer más diagnósticos. – William

+0

tengo este mismo problema: el código solía funcionar para siempre y ahora, después de algunas actualizaciones, dejó de funcionar – les2

2

me encontré con el mismo problema, y ​​encontraron útil esta discusión: My http.createserver in node.js doesn't work?

En pocas palabras, mediante la inserción de la línea: request.on("data",function() {}) dentro del bucle .createServer pero después del bucle request.on hizo trabajar.

+0

para aquellos que buscan más información sobre por qué esto es, ver aquí (en concreto lo de fluir y el modo de pausa): https : //nodejs.org/api/stream.html#stream_class_stream_readable –

Cuestiones relacionadas