2011-05-21 15 views
10

Estoy usando formidable para recibir una carga de archivo con node.js. Envío algunos campos junto con un archivo en una solicitud de varias partes.Cancelación de la solicitud de usuario con Node.js/formidable

Tan pronto como llegaron ciertos campos, puedo validar la autenticidad de la solicitud, por ejemplo, y me gustaría abortar toda la solicitud si esto no es correcto para evitar problemas de recursos.

No he encontrado una forma correcta de abortar la solicitud entrante. He intentado utilizar req.connection.destroy(); de la siguiente manera:

form 
.on('field', function(field, value) { 
    fields[field] = value; 
    if (!fields['token'] || !fields['id'] || !fields['timestamp']) { 
     return; 
    } 
    if (!validateToken(fields['token'], fields['id'], fields['timestamp'])) { 
     res.writeHead(401, {'Content-Type' : 'text/plain' }); 
     res.end('Unauthorized'); 
     req.connection.destroy(); 
    } 
}) 

Sin embargo, esto provoca el error siguiente:

events.js:45 
     throw arguments[1]; // Unhandled 'error' event 
        ^
Error: Cannot resume() closed Socket. 
    at Socket.resume (net.js:764:11) 
    at IncomingMessage.resume (http.js:254:15) 
    at IncomingForm.resume (node_modules/formidable/lib/incoming_form.js:52:11) 
    at node_modules/formidable/lib/incoming_form.js:181:12 
    at node_modules/formidable/lib/file.js:51:5 
    at fs.js:1048:7 
    at wrapper (fs.js:295:17) 

También probé req.connection.end() pero el archivo mantiene la carga.

¿Alguna idea? ¡Gracias por adelantado!

+0

También estoy interesado en esto. ¿Has encontrado una solución? – Nemok

+0

Lamentablemente, no. – Kamchatka

+0

¿Estaba casi listo para escribir una pregunta duplicada para este problema? ¿Alguna idea hasta ahora? –

Respuesta

4

El problema es que formidable no entendió que desea detenerlo. Prueba esto:

req.connection.destroy(); 
req.connection.resume = function(){}; 

Por supuesto, esto es una solución un tanto feo, me open an issue on github.

Cuestiones relacionadas