Estoy tratando de ejecutar curl usando el nodo child_process para obtener un archivo JSON (aproximadamente 220Ko) de una carpeta compartida en una red local. Pero en realidad devuelve un problema de búfer que no puedo resolver. Aquí está mi código:
var exec = require('child_process').exec;
var execute = function(command, callback){
exec(command, function(error, stdout, stderr){ callback(error, stdout); });
};
execute("curl http://" + ip + "/file.json", function(err, json, outerr) {
if(err) throw err;
console.log(json);
})
Y aquí está el error que obtengo:
if(err) throw err;
^
Error: stdout maxBuffer exceeded.
at Socket.<anonymous> (child_process.js:678:13)
at Socket.EventEmitter.emit (events.js:95:17)
at Socket.<anonymous> (_stream_readable.js:746:14)
at Socket.EventEmitter.emit (events.js:92:17)
at emitReadable_ (_stream_readable.js:408:10)
at emitReadable (_stream_readable.js:404:5)
at readableAddChunk (_stream_readable.js:165:9)
at Socket.Readable.push (_stream_readable.js:127:10)
at Pipe.onread (net.js:526:21)
fuente

curl --digest http://login:password@" + ip + "/webdav/file.jsonTuve un problema similar y lo solucioné pasando de ejecutivo a spawn:
var child = process.spawn('<process>', [<arg1>, <arg2>]); child.stdout.on('data', function (data) { console.log('stdout: ' + data); }); child.stderr.on('data', function (data) { console.log('stderr: ' + data); }); child.on('close', function (code) { console.log('child process exited with code ' + code); });fuente
process.execse usa en cosas como herramientas CLI, entonces sí, cambiar aspawndebería ser el camino a seguir.