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.json
Tuve 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.exec
se usa en cosas como herramientas CLI, entonces sí, cambiar aspawn
debería ser el camino a seguir.