私はNode.jsを学んでいて、非常に単純なスクリプトを持っていると思っていましたが、微調整してもスクリプトが永遠にハングアップすることはありません.
ダムサーバーを実行しているとします:
$ nc -l 32001 <<EOF
HTTP/1.1 200 OK
Content-Type: text/plain
Works
EOF
そして、次のスクリプトを実行します。
var http = require('http');
var options = {
hostname: 'localhost',
port: 32001,
method: 'POST',
headers: {'Content-Type': 'text/plain'}
};
var req = http.request(options, res => {
var exitCode = res.statusCode >= 200 && res.statusCode < 300 ? 0 : 1;
res.pipe(process.stdout).on('end', () => process.exit(exitCode));
});
req.on('error', error => console.error(error));
process.stdin.pipe(req)
.on('end', () => console.log('this does trigger'));
しかし、次のことを実行すると:
$ echo foobar | node my-script.js
ハングするだけで、リクエストのコールバックに到達しません。req ストリームが終了し、 http.request コールバックが呼び出され、それが出力されWorks
、最終的にプロセスが終了することが期待されます。
end
イベントが実際に呼び出されたことを確認し、コールバックでストリームprocess.stdin.pipe()
を手動で終了しようとしました。ただ、それだけでは終わりません。stdin を http.request にパイプして、ストリームを終了させるにはどうすればよいですか?req
end