NodeSchoolに入学しよう!

変換ストリームの利用

全334コースを10日間無料で

ぜひご覧ください。

無料で視聴する すべての加入プランを見る
または
変換ストリームの一種であるthourgh2-mapを使用して、ストリームに変換処理を施す方法について学びます。
講師:
11:06

字幕

このレッスンでは httpサーバーで クライアントから受け取ったデータを 処理する方法について説明します それではまずワークショッパーを起動しましょう learnyounode エンター 今回はこちらの最後から2番目の UPPERCASERER という問題を解きます エンターを押します 問題 (画面表示参照) 今回は クライアントから送信されたデータを処理します httpのリクエストオブジェクト自身が リーダブル・ストリームとなっていますので そこからさまざまな方法で クライアントが送信したデータを 読み取ることが出来ます リーダブル・ストリームからの データの読み取りには 様々なやり方が有るのですが 今回はパイプを使って データを読み取りながら変換しつつ 次のストリームに流し込む という事をやってみます そのために今回 新しいモジュールを導入します through2-map というモジュールです インスト―ルしましょう npm install through2-map インストール出来ました このモジュールで作成できる オブジェクト自身がストリームです そしてそのストリームは トランスフォーム・ストリーム と呼ばれる ちょっと変わったストリームで データを読み取りながら そのデータに対して なんらかの処理を施しつつ 次のストリームに渡す という事が出来ます では実際に使ってみましょう nodeのインタープリターを起動します node エンター そしてhttpサーバーを起動するために httpモジュールをロードしましょう require http それから今インストールした through2 モジュールもロードしましょう マップという変数に格納しておきます require through2‐map そしてまずは サーバーの作成です http の createServer で 作成できます createServerのパラメーターには コールバック関数を渡します function そしてそのコールバック関数は リクエスト オブジェクト と レスポンス オブジェクト を受け取ります request response そしてこのコールバック関数は クライアントが リクエストを送ってきた時点で 起動します まずその処理の中では最初に response の writehead を使って ステータスの設定と それからヘッダーの設定を行いましょう ステータスは成功を示す 200 です そしてヘッダーとして設定するのは content の type ですね 今回はテキスト・プレーンです text/plain これでヘッダーとステータスコードの 設定が出来ました 次にリクエストのパイプを使って データを流し込んでみます パイプにまずはじめに渡すのが マップ・モジュールで生成できる トランスフォーム・ストリームです そのマップのストリームには 1つ関数を渡すことが出来ます この関数は chunk つまりデータの部分ですね 読み込まれた部分的なデータを 受け取ります そのデータのデータ型は バファー・データになっています そしてそのバファー・データ型の データを読み取って まずはストリングに変換しましょう そしてストリングに変換したら 次はスプリットで 1文字ずつ格納された配列に変換します この様にから文字で スプリットを呼び出すことによって 1文字ずつが格納された配列に変換されます そして配列に変換されたので今度は リバース で 配列の順序を逆転させることが出来ます そして今度は逆転させた後は ジョインを使って 再度文字列の形になおします これでOKですね この様にしてトランスフォーム・ストリームで データを呼び出しながら そのデータに対して どんどん処理を加えて 次のストリームに流し込んでいきます では 関数の定義を閉じて マップの呼び出しを閉じて パイプを閉じます そしてパイプを閉じたら 大事なのは 再度パイプをして 今度はこれを レスポンスに流し込んでやります これをやらないと サーバーの処理が その場で止まってしまいますので 注意してください node ではリクエストを受けた時に 何らかの形で 接続を必ず終了してやらないと サーバーがフリーズしてしまいます この場合はパイプによって 必ずエンドが呼び出されて 接続が切断することが保証されます ではこれでリクエストの処理は完了して クリエイト サーバー の呼び出しをして サーバーの作成が完了したので リッスンします ポート番号は20000番でリッスンします リッスンします ポート番号は20000番でリッスンします これでサーバーが起動しました さてそれでは実際に このサーバーに対して リクエストを投げてみましょう コマンドから カールコマンドを使って リクエストにデータを付与して リクエストを投げてみます まず ハイフン H オプションで データの種別を指定します コンテントタイプが テキストプレーンですね それから ハイフン D オプションで データそのものの指定をします abcdefg という文字列を渡しています それから最後にサーバーのURLですね http//localhost: ポート番号 20000番 これでリクエストを投げてみます エンター この様に今投げたabcdefg が 逆順になって gfedcba という 順番になりました この様にthrough2マップモジュールを使う事によって クライアントのデータを読み込みつつ それに処理をかけつつ 次のストリームに流し込む という事が出来ます ではヒントはここまでですので ここでいったん動画を止めて 皆さんでプログラムを書いてみて下さい さて皆さん プログラムは書けましたでしょうか 答え合わせです それでは私の方で プログラムを書いていきます テキストエディターでプログラムを開きます program.js まずはhttpモジュールのロードをしましょう require http それから 今回使用する through2‐mapモジュールもロードします require through2‐map そしてサーバーの作成です createServer コールバックは リクエスト と レスポンス オブジェクトを 受け取ります そしてサーバーの作成が完了したら リッスンしましょう リッスンする ポート番号は コマンドライン引数で与えられます process の argv 添え字は2ですね そして毎度のことながら parseIntで 数字に変換してやります ではリクエストのデータを変換しましょう request の pipe まずはthrough2‐mapで 小文字から大文字への変換をします コールバックで chunk を受け取って その chunk を toString で文字列に変換して toUpper で大文字に変換します これだけですね そして次に再度パイプをして レスポンスに流し込みます それからステータスコードとヘッダーの 設定も忘れずにやっておきましょう response の writehead 成功を示す 200 それから content type ですね content type は text/plainです これでプログラムは完成のはずです テストを通るかどうかやってみましょう learnyounode verify program.js 何かエラーがあったようです 閉じるカッコが1つ足りませんでしたね カッコを1つ追加して再度検証してみます まだエラーがあったようですね require のスペルミスのようです require 確かにこれはスペルミスですね スペルミスを修正して再度実行してみます まだミスがありましたね プログラムを再度編集します このストリングのメソッドが toUpper ではなく toUppercase でした 正しくは toUppercase というメソッドです これによって文字列が 大文字に変換されます では再度実行してみます 今度は上手くいきました テストが全て通って この様に 合格しました このレッスンでは node js の http サーバーで クライアントから受け取ったデータを 処理する方法について学びました

NodeSchoolに入学しよう!

NodeSchoolワークショッパーとは、オープンソースで開発されているNode.jsやJava Scriptについて学ぶためのクイズ形式のアプリケーションです。このコースでは、learnyounodeとexpressworksという2つのワークショッパーを通じてNode.jsとExpress.jsの基本的な使い方を学びます。

3時間13分 (24 ビデオ)
現在、カスタマーレビューはありません…
 
ソフトウェア・トピック
Node.js Node.js 0.10.24
価格: 3,990
発売日:2015年04月07日

このコースは、「オンデマンド」でご利用可能であり、ダウンロードすることもオンラインで見ることもできます。

ダウンロードすると、オフラインでコースを使用し、豊富なインターフェースをフルに活用できます。複数のデバイスを使用したり、 一度に全コースをダウンロードしたくない場合は、アカントにログインして、ストリーミング・ビデオとしてコースのレッスンを視聴してください。

ビデオトレーニングをお楽しみいただけますように! お問い合わせは、cs-jp@lynda.com宛までご連絡ください。