19

たとえば、次のコード (server.js という名前) を使用して、最も基本的な webServer ノード (Windows を使用) で実行しています。

    var http = require('http');
       http.createServer(function (req, res) {
         res.writeHead(200, {'Content-Type': 'text/plain'});
         res.end('Hello World\n');
       }).listen(1337, '127.0.0.1');
    console.log('Server running at http://127.0.0.1:1337/');

これを子プロセスとして実行したいのですが、次のようにして正常に実行しています。

var exec = require('child_process').exec;
var serv = exec('node server.js', function(error, stdout, stderr){
    console.log('outputs & errors:' + error, stdout, stderr);
});

ただし、2 番目のファイルを実行すると、何も受信しません。「出力とエラー」、「...で実行中のサーバー」はありません。ブラウザに localhost:1337 と入力すると、「hello world」と表示されるので、実行中であることがわかります。「実行中のサーバー...」をパイプして、リッスンしていることを「確認」できる方法はありますか?

4

3 に答える 3

29

Exec が戻りSTDOUTSTDERR子プロセスが終了したら、 を参照してくださいexec。そのため、サーバーの起動時に出力が表示されません。

必要なのは、子プロセスと親forkプロセスを自動的に接続するです。これは、子プロセスがノード プロセスである場合に推奨される方法です。STDOUTSTDERR

exec を使用したい場合は、子プロセスのストリームを使用してデータを取得できます。

child.stdout.pipe(process.stdout);
child.stderr.pipe(process.stderr);
于 2013-03-06T21:03:23.810 に答える