この演習の目標は、受信する要求ごとに同じテキストファイルを処理するHTTPサーバーを作成することです。ここに私のコードです。それは動作しません。 HTTPファイルサーバーと.writeHeadメソッド
var http = require ('http');
var fs = require ('fs');
var port = process.argv[2];
var file = process.argv[3];
var bl = require ('bl');
var server = http.createServer(function (request, response) {
var stream = fs.createReadStream(file);
var streamPipe = stream.pipe(response);
response.write(streamPipe);
});
server.listen(port);
私は正しい答えをチェックし、それは、関数の最初の行に次のコードを配置し、私のResponse.Writeを削除するには()メソッドです:私のコードの代わりに
response.writeHead(200, { 'content-type': 'text/plain' });
、私は応答ストリーム(ライン10)に要求ストリームから渡されたデータを書き込むだろうと思っている:
response.write(streamPipe)
私は理解していません。 Response.writeHeadは、ストリームが.createReadStreamメソッドを使用して確立された後ではなく、以前からではありませんか?
response.write()で既存のデータを送信していませんか?私はこれがオブジェクトではなく文字列を返すようにしたいが、パラメータは文字列でなければならず、そうでなければ動作しない。 toString()メソッドは[object Object]を返します。
誰かが、writeHeadメソッドのパラメータを説明してください、それが他のものの前に行くのはなぜですか?
これはロードされた質問です。私はノードに慣れていなくて本当に勉強に興奮していますが、わかりやすいだけです。私はかなり基本的なJavaScriptの経験といくつかのJavaを持っていますので、有望なnode.js開発者のためのすべての助けに感謝します。
非常に役に立ちます。私はドキュメンテーションをチェックアウトした。フォローアップq - stream.pipe(レスポンス)で正確に何が起きているのかを素人の言葉で説明できますか?送信元から応答にデータを送信します。 response.writeHead()メソッドを含めて私の問題を修正し、コンテンツの文字列を送信しましたが、この "パイプ"が確立される前に起こります。それは私にとって非常に混乱しています。 – Streamer
@Azurasky 'response'をストリームとして扱うことができます。このストリームに最初に送るのはステータスとヘッダです(つまり、あなたは '。writeHead()'を呼び出します)。しかし、流れはまだ開いています。ですから、今度は 'stream.pipe(response)'を呼び出して、すべてのストリームを読み込み可能なストリーム 'stream'から書き込み可能なストリーム' response'に送ります。そうすれば、あなたは応答の内容を記入します。だから '.writeHead'が' .pipe'の前になければなりません。 (デフォルトでは) '.pipe'は' response'ストリームを自動的に閉じます。今はっきりしていることを願っています。しかし、より多くの質問をしてください。 :) – freakish