NodeSchoolに入学しよう!

URLにパラメータを埋め込む方法

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

ぜひご覧ください。

無料で視聴する すべての加入プランを見る
または
URLに埋め込まれた値をアプリケーションからパラメータとして使用する方法について学びます。また、Node.jsでSHA1ハッシュを作成する方法についても説明します。
講師:
08:34

字幕

このレッスンでは、express.jsで、 URLに埋め込まれた パラメーターを取り扱う方法について 説明します。 それではまずワークショッパーを 起動しましょう。 expressworks、エンター。 今回はこちらの、PARAM PAM PAM という問題を解きます。 エンターを押します。 問題。 /message/:idへのPUTリクエストに 応答する Express.jsサーバーを 作成してください。 また、レスポンスとして、現在日付を toDateString()で フォーマッティングしたしたものと、 idを結合した上で、 SHA1ハッシュにして返してください。 ただし、アプリのポート番号は、 1番目のコマンドライン引数で 与えられるものとします。 今回はリクエストのURLに含まれている パスの一部分を パラメーターとして使用する、 ということをやります。 これはウェブアプリケーション フレームワークではわりと一般的に 用意されている機能で、 例えば、こちらのヒントの例の、 この部分。 /path/:name、このような リクエストがあったとすると、 この:nameに書かれている部分、 に相当するする部分ですね。 例えば、リクエストのURLが、 :nameのJohnSmithだったとします。 すると、こちらに書かれている様に、 リクエストのparamsというプロパティに nameというプロパティが 使える様になっており、 そのnameを参照すると、JohnSmithという 文字列が中に入っています。 このような機能を利用することによって、 URLをリソースとして扱うような アプリケーション、 いわゆるレストフルなシステム というやつですね。 そのようなシステムを作成するのが 容易になります。 また、今回の問題のもう一つの ポイントとして、 リクエストで受け取ったIDと、 それから現在の時刻ですね。 これを結合したうえで、 SHA1ハッシュにして、 レスポンスで返すこと、 という条件があります。 SHA1ハッシュというのは、 暗合論的な関数の一種で、 これを利用することによって、 データを容易に識別できるような、 固定の長さの 文字列を得ることができます。 SHA1ではどのような巨大なデータを ハッシュ化しても、 固定長の文字列が返ってくる、 というのが特徴です。 そして元のデータが1ビットでも 異なっていれば、 その異なるデータが同じSHA1ハッシュ値に なる確率は極めて低いので、 その結果の文字列を、 そのデータそのものを識別する、 識別子として使用することができます。 つまり、SHA1を使えば、そのデータの 指紋のようなものを取得できるのです。 それではNodeで実際にSHA1の値を 計算してみましょう。 まずはNodeのインタープリターを起動します。 そして、SHA1を使用するための、 クリプトというモジュールは Node.jsに最初から入っています。 cryptoモジュールをロードします。 requireのcrypto、 そしてSHA1のオブジェクトを 作成しましょう。 SHA1はcryptoのcreateHash、 のsha1 スペルが間違っていました。 cryptoですね。 そしてそのSHA1オブジェクトに対して、 updateでデータを渡してやります。 ここのパラメーターにはSHA1化したい データを渡してやります。 何でも構いません。 例えば今はabcdefgという文字列を SHA1化してみます。 そしてデータを設定した上で、 digest、 今は、16進数の文字列で、 値を得たいので、 このようにhexという文字列を 渡します。 すると、 digestでこのような、 abcdefgという文字列が SHA1ハッシュ化された文字列が 得られました。 今渡した元のデータがこのように 小さあデータだったので分かりづらいですが、 例えばこれが数ギガバイトといった 巨大なデータを渡しても、 この程度の固定長の長さの 文字列が得られます。 そしてその文字列は、 異なるデータのSHA1ハッシュと 衝突する確率は 極めて低いです。 さて、ヒントはここまでです。 それではここで動画を止めて、 皆さんで問題を解いてみてください。 さて、問題は解けましたでしょうか。 それでは答え合わせを していきたいと思います。 私の方でプログラムを作成していきます。 program.js というファイルを開きます。 まずはExpress.jsのロードです。 require('express') それから今回、 暗合化も利用しますので、 cryptoモジュールのロードです。 require('crypto') それからアプリケーションインスタンスも 作成しましょう。 そしてアプリケーションインスタンスに対して、 今回のリクエストは putリクエストですので、 putメソッドを使用します。 そしてputのリソースのパスは、 /message/:id そしてリクエストハンドラを設定します。 request,response 今回この中に、パスに:から始まる 識別子が指定されていますので、 requestのparamsの、 例えば今回ですと、 idというプロパティが利用できます。 今回の問題は、現在時刻と これを文字列として結合して、 それをSHA1のハッシュとして レスポンスで返す、という問題でした。 SHA1ハッシュの値を得るために、 cryptoのcreateHashの sha1のupdateで、 現在日付をtoDateStringで 文字列にして、 それとこちらの、 URLの中に含まれているidの部分を 結合、 その上でdigestにする、 digestの仕方は、16真数、 これでレスポンスのボディーの作成は できましたので、 これをあとは送信してやりましょう。 送信をするためには、 レスポンスの endのbody、 これでいいですね。 そしてあとは、 アプリケーションの起動です。 listen、 listenするポート番号は コマンドラインのパラメーターで 与えられます。 argvの2ですね。 これで、 では検証してみましょう。 expressworks verify program.js プログラムにミスがあるようです。 修正します。 messagesと複数形に していましたね。 ここは単数形でした。 URLのパスを修正して、 再度実行してみます。 今度は、テストが通りました。 このレッスンでは、Express.jsで URLに含まれるパラメーターを 取り扱う方法について学びました。

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