1

http モジュールを使用せずに node.js に HTTP サーバーを実装する必要があります。なんて面白い!応答ソケットの送信に問題があります。

ファイルをフェッチしようとしているので、コードは次のようになります。

fileStream = fs.createReadStream('example.jpg');
fileStream.on("end", function (close) {    
    var str = "HTTP/1.1 200 OK\r\Content-Type: image/jpeg\r\n" //and some more headers.
    socket.write(str);
    socket.pipe(fileStream);
    socket.end("\r\n");
});

私は何が欠けていますか?

もちろん、ネットモジュールを使用してソケットとfsも取得しています。

4

1 に答える 1

1

あなたが持っているコードには2つの主な問題があります。

  • ヘッダーの後に 2 組の "\r\n" が続き、その後にコンテンツが続く形式の応答。end() 呼び出しの「\r\n」は にある必要がありstrます。また、最初の「\r\n」から「n」が欠落しています。
  • readstream の内容をパイプしようとしていますが、これはすばらしいことですが、すべてをストリームの end() 内で行っているため、データはすべて既に送信されているため、送信するパイプは何も残っていません。

代わりにこのようなことを試してください。読み取りストリームを作成し、応答とパイプを送信してから残ります。

var str = "HTTP/1.1 200 OK\r\nContent-Type: image/jpeg\r\n\r\n";
socket.write(str);
var fileStream = fs.createReadStream('example.jpg');
fileStream.pipe(socket);
于 2011-12-10T15:50:30.390 に答える