EJSテンプレートエンジンの使い方メモ6 POST送信されたデータの処理

2016-03-23

node01

こんにちは。さがっとです!

WEBアプリを作成できる。
を目標にnode.jsについて学習したことをメモしていきたいと思います。

2016/03学習分です。ペースあげないとアカン。。。

やりたい事

題名通りPOST送信されたデータの処理をします!

構成は以下の通り

無題

■template.ejs:全体表示のテンプレート

■404.ejs:存在しないページにアクセスがあった時用のテンプレート

■index.ejs:”/”か、”/index”にアクセスがあった時用のテンプレート

■post.ejs:POSTでアクセスされた時用のテンプレート

全体表示のテンプレートを今までindex.ejsと名前をつけてたけど、分かりにくいのでリネーム・・。

各テンプレートファイル

まず、各テンプレートファイルを用意。

template.ejs(全体表示のテンプレート)

★<%-content %>に各ejsの中身を書き出す。

index.ejs(”/”か、”/index”にアクセスがあった時用)

topページにPOST用のフォームを作成しておく。

ログイン画面想定?なのでIDとパスワード入力のテキストBOXと送信ボタンを作成。

post.ejs(POSTでアクセスされた時用のテンプレート)

POSTされたデータを表示する用のテンプレート。

受け取ったデータを<%= idname %>と<%= pass %>に表示します。

404.ejs(存在しないページにアクセスがあった時使用)

スクリプトファイル

serverapp.js

な・・・、長い・・。

★1 querystringオブジェクトの取得

クエリー文字列を扱うため、「querystring」というオブジェクトを取得しておく。

これで、クエリー文字列から必要な値を適格に取り出せるようになる。

クエリ文字列:Webサーバに送信するデータをURLの末尾に特定の形式で表記したもの。
例) http://example.com/foo/post?name1=value1&name2=value2
「?」以降がクエリ文字列
URLの末尾に「?」マークを付け、続けて「名前=値」の形式で記述する。
値が複数あるときは「&」で区切る。

★0「favicon.ico」のリクエスト処理

node.jsを使ってて気づいたのですが、コンソールログを仕込むと何故か毎回2回リクエストが走ってる模様。

調べてみると、「favicon.ico」のリクエストがきているとのこと。

favicon.ico:Webブラウザのブックマーク(お気に入り)機能で表示される、そのWebサイトのアイコン画像。

リクエストのURLを見て分けてやらないとGET向けの処理が2回実行され、毎回「NOT FOUND PAGE」とログが流れてしまうので、とりあえず対処。imageフォルダに「favicon.ico」を用意しておくことを忘れずに!

時間あるときに詳しく調べてメモしよう。

★2 requestオブジェクトの「method」を取得

HTTPメソッドを見分けるにはrequestオブジェクトの「method」を取得すればOK。

★3 取得したHTTPメソッドが「GET」の場合

★2で取得したmethodinfoが”GET”だった場合は前回までと同じ処理を行う。

★4 取得したHTTPメソッドが「POST」の場合

POSTで送信されたデータを受信した際、「data」というイベントが発生するので、「data」に対しイベントハンドリングを行う。

このイベントハンドラは引数に送られてきたデータが渡されるので、変数bodyに格納しておく。

 

 

 

次に、「end」というイベントハンドラを用意し、すべての受信処理が完了した後の処理を記述する。

ここでは、POSTデータのレンダリングを行っています。

レンダリング前のPOSTデータの整形はquerystringオブジェクトの「parse」メソッドで行なう。

「parse」メソッド:引数に渡されたクエリー文字列をパースし、オブジェクトにまとめる。

クエリ文字列が、name1=value1&name2=value2だった場合は、

と整形される。

★5 全体表示のテンプレート(index)内に、コンテンツ(contentdata)をはめこむ

あとは前回まで同様、全体表示のテンプレート(index)内に、コンテンツ(contentdata)をはめこむ。

動かしてみる

コマンドプロンプトでスクリプトファイルを起動。

http://localhost:3000へアクセス。適当にIDとパスワードを入れて「送信」ボタンをクリック

 

無題

無題

完璧!

そろそろ複雑になってきたので、次からはフレームワーク使います。

 

 

 

この記事がお役に立てたら、是非シェアをお願いします^^