1

いくつかの事前定義されたシェルコマンドを実行し、それらをhttpサーバーにプレーンテキストとして返したいと思います。(1)で書かれたコンテンツは私のブラウザに配信されていますが、最終的にstdoutである必要がある(2)のコンテンツは配信されていません。誰かがこれを達成する方法を私に助けてもらえますか?

var http = require('http'),
url = require('url'),
exec = require('child_process').exec,
child,
poort = 8088;


http.createServer(function(req, res) {
 res.writeHead(200, {'Content-Type': 'text/plain'});

    var pathname = url.parse(req.url).pathname;
    if (pathname == '/who'){
        res.write('Who:'); // 1
        child = exec('who',
                     function(error, stdout, stderr){
                        res.write('sdfsdfs');   //2
                     })


    } else {
        res.write('operation not allowed');
    }

 res.end();

}).listen(poort);
4

1 に答える 1

1

これは、res.end()を配置する場所が原因です。

execは非同期であるため、res.end()は、実際にはres.writeが(2)とラベル付けする前に発生します。.endの後に書き込みを発行することはできないため、ブラウザーはそれ以上のデータを取得しません。

res.writeの後で、execコールバックでres.end()を呼び出す必要があります。子プロセスが終了するとexecコールバックが発行され、完全な出力が取得されます。

于 2013-02-10T00:42:49.597 に答える