Streamを勉強しているNode初心者です。
readableStreamの'data'イベントについて分からないところがありますので質問させていただきます。
以下のコードでpostされた値を取得することはできましたが、その過程で疑問があります。
var qs = require('querystring'); if(req.method === "POST") { //formが投稿された場合 var data = ""; var posts[]; //req.setEncoding('utf-8'); req.on("data", function(chunk) { data += chunk; console.log('chunk:',chunk); console.log('data:',data); }); req.on("end", function(){ var query = qs.parse(data); console.log('query:',query) posts.push(query.name); //値を無事posts配列に格納できました。 }); }
'data'イベント発生時、chunkを変数dataに結合して(data += chunk;)、
chunkとdataをconsoleに表示させると以下の結果になりました。
//コンソールに出してみた結果 chunk: <Buffer 6e 61 6d 65 3d 25 45 33 25 38 33 25 38 30 25 45 33 25 38 33 25 39 46 25 45 33 25 38 33 25 42 43 25 45 33 25 38 33 25 38 36 25 45 33 25 38 32 25 41 44 ... > data: name=%E3%83%80%E3%83%9F%E3%83%BC%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88 query: { name: 'ダミーテキスト' }
dataをパースすることでqueryの結果になることは理解できたのですが、chunkとdataの結果に自分の理解が追いつきません。
chunkについて、console表示されている<Buffer 6e 61 6d 65 ... >の数字は何を意味しているのでしょうか。
間違っているかも知れませんが、'data'イベント発生時にBufferが確保されてBufferにchunkが入ってくると思っており、
<Buffer chunk chunk chunk ... >とイメージしております。(数字はchunkだと思ってしまっています。)
また、data += chunk; をすることで、以下のエンコード処理をしていないのにも関わらず(上記のコードでは'data'イベント前にコメントアウトしています)、dataはエンコードされてconsoleに表示されます。どのタイミングでエンコードされているのでしょうか。
そしてdata += chunk; の処理では、chunkは少しずつデータが渡されるので=ではなく+=を使う必要があると認識して大丈夫でしょうか。
req.setEncoding('utf-8');
非常に長くなり大変恐縮ですが、回答いただけたらとても助かります。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/16 03:06