NodeSchoolに入学しよう!

モジュールの利用

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

ぜひご覧ください。

無料で視聴する すべての加入プランを見る
または
Node.jsのパッケージマネージャであるnpmからモジュールをインストールした上で、それを利用する方法について学びます。また、Streamのpipeについても説明します。
講師:
11:34

字幕

このレッスンでは npmから モジュールをインストールして そのモジュールを 使用する方法について 説明します それではまず ワークショッパーを 起動しましょう learnyounode エンター 今回は こちらの8番目の HTTP COLLECT という問題を解きます エンターを押します 問題 コマンドライン引数の 1つ目のパラメータで与えられた URLに対して HTTPの GETリクエストを行った上で そのレスポンスデータを収集し 2つの行をコンソールに出力する プログラムを書いてください ただし 1行目は データに含まれる文字数 2行目は サーバーから送られた文字を すべて結合したものとします さて HTTPで データを取得して そのデータを まとめあげて出力する という問題です HTTPからのデータを 取得するやり方には いくつかのやり方が あるのですが たとえば ひとつのやり方として ノードインタープリターを 立ち上げて 実際にやってみます まずは HTTPモジュールの ロードです http = require('http') そしてhttpの getメソッドを使用しますね getメソッドの 1つ目のパラメータはURLです http;//example.com こちらから データをゲットしてみます 2番目のパラメータは コールバック関数で そのコールバック関数の パラメータとしては レスポンスオブジェクトが 渡されます そしてこの レスポンスオブジェクトに対して データイベントを リッスンすることによって そのサーバーからの データの着信を知ることができます しかしながら このデータイベントというのは 何回かに分けて 発火される可能性があります つまり すべてのデータの ダウンロードを完了した時点で 一度だけ イベントが 発火されるのではなく ダウンロードをしながら 何度にも分けて そのデータイベントが発火される 可能性があるということです そこで レスポンスのデータを まとめあげるための ひとつの方法として たとえば まとめあげる用の変数を 1つ用意しておいて 最初は空文字列で 初期化しておきます そして response.on('data')で データイベントを ハンドリングして コールバックの 1番目のパラメータは dataそのものですね そしてその イベントハンドラの中で このように 各データを 足しあわせてやる データオブジェクトには バッファ型のデータが 入っていますので toStringで文字列に変換した上で モジュールに結合ですね そしてすべてのデータを ダウンロードした 完了した というタイミングを 知りたいときには レスポンスの end イベントを使用します この中で たとえば 文字の長さを出力したければ 文字列の結合は すべて完了しているので ここでlengthを 出力してやればOKです これでサーバーから送られてきた データの長さを 出力することができます 1点 注意点があります ノードからコールバックに エラーが抽出される場合には その1番目の パラメータとして エラーオブジェクトが入ってくる という原則があります しかしながら メソッドを呼び出した結果の エラーを知る 他の手段がある場合には コールバックの 1番目のパラメータに エラーオブジェクトが 入ってくるとは限りません たとえば 今書いた例で GETのコールバックの 1番目には エラーオブジェクトは 入ってきません なぜならば レスポンスオブジェクトの ステータスコードを見ることによって エラーが発生したどうかを 知ることができるからです またレスポンスの データイベントの 一番目のパラメータは エラーオブジェクトには なっていません なぜならば レスポンスのデータを取得したときの エラーを知るためには エラーイベントという 専用のイベントが用意されているからです このイベントを ハンドリングしてやって そして  そのコールバックの中には エラーオブジェクトが 入ってきます これにより データの取得中の エラーを知ることができます たとえば 今の場合は エラー出力に エラーの内容を そのまま出力してみます そして それでは このGETを実行してみましょう 関数の定義を閉じて GETを実行 するとこのように 1270という レスポンスの文字数が 出力されました このようなやり方で データをまとめあげることもできるのですが npmのモジュールを 使用することによって もっと簡単に 同じことをやることができます それでは今回は BLというモジュールを 使用してみます npmのinstall bl と打ってエンターを押しましょう インストールした 環境によっては もしかすると 特権が必要 と言うことが いわれる場合があります 特権が必要だよ  というエラーが出た場合には 先頭にsudoを付加して それで再度 実行をしてください それではblの インストールが完了したので 再度ノードの インタープリターを起動します そしてまずは HTTPモジュールをロードして それからBLモジュールも ロードします インストールしたモジュールは このように requireメソッドを使って ロードすることができます その際にローカルに インストールされているので このように 先頭に ./ を 付与する必要はありません npmで インストールしたものは ./ 先頭に不要です これで大丈夫です BLの 使い方なのですが HTTPの GETで とりあえず GETをやりましょう http://example.com そしてコールバックで responseオブジェクトを取得します このresponseオブジェクト というのは 実際には ストリームという データ型のオブジェクトです より詳しく言うと response は リーダブルストリーム型のデータです リーダブルストリームは pipeという メソッドを備えています ですからこのように レスポンスのpipeという メソッドを呼び出して そのpipeの 1番目のパラメータとして ライタブルストリームオブジェクトを 渡すことができます そうすると response から 読み取ったデータが 次々と ライタブルストリームに 書き込まれて すべてのデータの ロードを完了するまで そのすべてのデータが ライタブルストリームに 流し込まれます つまりpipeを 使用することによって リーダブルストリームと ライタブルストリームを 結合することが できるということです ここで BLモジュールによって 作成できるオブジェクトは ライタブルストリームです そしてBLモジュールは リーダブルストリームから 読み込んだデータを すべて結合してくれます ちなみにBLというのは バッファリストの略で リーダブルストリームから 渡されたバッファをすべて結合した上で ひとつのバッファに してくれるという意味ですね 結合が完了すると コールバックが呼び出されます そのコールバックの 1番目のパラメータはエラー 2番目のパラメータで 結合が完了した バッファです そして 今は バッファの中に入っている 文字の文字数を 再度出力してみます これをバッファを 文字列に変換したうえで その文字列を出力 そして関数の定義を閉じて blの呼び出しを閉じて pipeの呼び出しを 閉じます それから今度は GETのコールバックの 関数定義を閉じて GETの呼び出しを閉じて これで実行できますね 実行してみます すると先ほどと同じように 1270という 文字数が出力されました このように BLモジュールを 使用することによって サーバーから返された データのまとめあげ 結合を 少し簡単に 書くことができました それでは ヒントはここでおしまいです ここで一旦動画を止めて 皆さんで問題を 解いてみてください さて問題は 解けましたでしょうか それでは答え合わせです 私の方で 正解のプログラムを 書いてみます program.jsという ソースコードの編集を 開始します まずはhttpモジュールの ロードですね require http それからBLモジュールを 今回使用しますので BLモジュールもロードします require('bl') そして http の getメソッドを使用して ロードするべきURLは コマンドラインパラメータで 与えられます argvの2ですね コールバックの設定 そしてコールバックで取得した レスポンスオブジェクトに対して レスポンスは リーダブルストリームなので pipeメソッドが 使用できます そしてpipeで pipeに対してbl バッファリストオブジェクトを 渡してやることによって データを結合します そのコールバックは 1番目に エラーオブジェクトを受け取り 2番目に結合された結果の バッファオブジェクトですね で今回の問題は 1行目に すべての文字数を出力する 文字数は データをtoStringして そのlengthですね そして2行目は データそのものだったので toStringしたものです これで今回の問題の 答えになるはずです では答え合わせしてみましょう learnyounode verify の program.js このように 問題に正解できたようです このレッスンではnode.jsの モジュールをインストールして そのモジュールを使用する 方法について学びました

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宛までご連絡ください。