util traduccion socket read onread nodejs node net error econnreset catch _errnoexception javascript node.js express

javascript - traduccion - nodejs request error econnreset



La POST de Node.js causa el código[Error: socket colgar]: ''ECONNRESET'' (2)

Creé una muestra para publicar datos en un servicio de descanso y descubrí que cuando tengo un carácter no latino o no latino (consulte data.firstName), mi solicitud de publicación usando TEST-REST.js arrojará

error: {[Error: socket colgar] código: ''ECONNRESET''}.

// TEST-REST.js var http = require(''http''); var data = JSON.stringify({ firstName: ''JoaquÌn'', }); var options = { host: ''127.0.0.1'', port: 3000, path: ''/users'', method: ''POST'', headers: { ''Content-Type'': ''application/json'', ''Content-Length'': data.length } }; var req = http.request(options, function(res) { var result = ''''; res.on(''data'', function(chunk) { result += chunk; }); res.on(''end'', function() { console.log(result); }); }); req.on(''error'', function(err) { console.log(err); }); req.write(data); req.end();

y en mis servicios de descanso, me arrojó un error como este:

SyntaxError: Unexpected end of input Sun Sep 08 2013 23:25:02 GMT-0700 (PDT) - at Object.parse (native) at IncomingMessage.<anonymous> (/Volumes/Data/Program_Data/GitHub/app/node_modules/express/node_modules/connect/lib/middleware/json.js:66:27) info at IncomingMessage.EventEmitter.emit (events.js:92:17) at _stream_readable.js:920:16 : - - - [Mon, 09 Sep 2013 06:25:02 GMT] "POST /users HTTP/1.1" 400 - "-" "-" at process._tickDomainCallback (node.js:459:13)

si reemplazo el valor de FirstName de ''Joaquín'' a ''abc'', todo funciona bien. Creo que me falta algo para apoyar o escapar para que funcione.

¿Alguien tiene alguna idea de cómo resuelvo este problema? También intenté seguir: require (''querystring''). Escape (model.givenName), y funciona, pero no estoy contento con él.

ACTUALIZADO Descubrí que si hago un comentario: app.use (express.bodyParser ()) ;, el error desaparece.


Este es un problema del nodo, no un problema del expreso. https://github.com/visionmedia/express/issues/1749

para resolver, cambiar de

''Content-Length'': data.length

a

''Content-Length'': Buffer.byteLength (datos)

REGLA DE ORO

Siempre use Buffer.byteLength () cuando quiera encontrar la longitud del contenido de las cadenas

ACTUALIZADO

También debemos manejar el error correctamente en el lado del servidor para evitar colisiones al agregar middleware para manejarlo.

app.use(function (error, req, res, next) { if (!error) { next(); } else { console.error(error.stack); res.send(500); } });


El problema es que si no maneja este error y mantiene el servidor con vida, este exploit de bloqueo remoto podría usarse para un ataque de DOS. Sin embargo, puede manejarlo y continuar, y aún cerrar el proceso cuando ocurren excepciones no controladas (lo que le impide ejecutarse en un estado indefinido, algo muy malo).

El módulo de conexión maneja el error y llama a next() , devolviendo un objeto con el cuerpo del mensaje y status = 400 . En su código de servidor, puede agregar esto después de express.bodyParser() :

var exit = function exit() { setTimeout(function () { process.exit(1); }, 0); }; app.use(function (error, req, res, next) { if (error.status === 400) { log.info(error.body); return res.send(400); } log.error(error); exit(); });