Si vous demandez juste généralement ce qui se passe mal, il y a deux choses principales:
- Vous utilisez
child_process.exec()
mal
- Vous n'appelé
res.end()
Qu'est-ce que vous êtes la recherche est quelque chose de plus comme ceci:
var http = require("http");
var exec = require('child_process').exec;
http.createServer(function(req, res) {
exec('uptime', function(err, stdout, stderr) {
if (err) {
res.writeHead(500, {"Content-Type": "text/plain"});
res.end(stderr);
}
else {
res.writeHead(200,{"Content-Type": "text/plain"});
res.end(stdout);
}
});
}).listen(8000);
console.log('Node server running');
Notez que cela ne nécessite pas réellement le "streaming" dans le sens où le mot est généralement utilisé. Si vous aviez un long processus d'exécution, de sorte que vous ne vouliez pas mettre en mémoire tampon stdout en mémoire jusqu'à ce qu'il soit terminé (ou si vous envoyiez un fichier au navigateur, etc.), vous voudriez "streamer" la sortie. Vous devez utiliser child_process.spawn pour démarrer le processus, écrire immédiatement les en-têtes HTTP, puis chaque fois qu'un événement 'data' est déclenché sur stdout, vous devez immédiatement écrire les données dans le flux HTTP. Dans un événement 'exit', vous appelez end sur le flux pour le terminer.