「WordPressで学ぶPHP(2)データ構造(配列・オブジェクト)編」を発売しました。
本書は「WordPressで学ぶPHP(1)変数・制御構造編」の続編にあたり、PHPの「データ構造」(配列とオブジェクト)について解説します。
配列やオブジェクトは、頭の中で考えるだけでは、イメージがつかみにくいです。本書では図を多用して、配列やオブジェクトをなるべく分かりやすく解説することを心がけました。
Kindle本で、定価250円です。
Node.jsを学ぶ(その8・Expressのrouterとviewの基本)
Expressでは、アクセスされたアドレスに応じて、「router」と呼ばれるJavaScriptで処理を行い、結果を「view」で出力する仕組みになっています。
今回は、routerとviewの基本を解説します。
1.viewをEJSにしてアプリケーションを新規作成する
まず、Expressでアプリケーションを新規作成します。
前回解説したように、「express アプリケーション名」で作成することができます。
ただ、デフォルトではviewのテンプレートエンジンが「Jade」になっています。
Jadeでは、HTMLを簡潔に書けるように、独自の記法を取っています。
ただ、routeとviewの基本を解説するためには、viewがJadeだと、Jadeの文法から解説する必要があります。
そこで、viewをJadeではなくEJSにすることにします。
EJSでは、HTMLの中に「<% ... %>」のような部分を入れて、動的に変化する値を出力する仕組みを取っています。
viewをEJSにしてアプリケーションを新規作成するには、以下のコマンドを入力します。
express -e アプリケーション名 cd アプリケーション名 npm install
1.インデックスページに対応するrouterとview
Expressでアプリケーションを新規作成した時点では、インデックスページ(http://ホスト名:ポート番号/)にアクセスした際には、インデックスページ用のrouterが実行され、インデックスページ用のviewに従って、ページが表示されます。
インデックスページ用のrouterは、「routes」ディレクトリの「index.js」ファイルです。
また、EJSでviewを作成した場合、インデックスページ用のviewは、「views」ディレクトリの「index.ejs」です。
index.jsのファイルの内容は、以下のようになっています。
「res.render('index', { title: 'Express' });」とあり、「index.ejs」viewに従ってページをレンダリングする、という動作になっています。
また、レンダリングの際に「{ title: 'Express' }」というオブジェクトをパラメータとして渡しています。
これによって、view内でオブジェクトが定義された状態になり、そのオブジェクトのプロパティの値を出力することができます。
exports.index = function(req, res){ res.render('index', { title: 'Express' }); };
また、index.ejsファイルの内容は、以下のようになっています。
「<%= title %>」は、ビューに渡されたオブジェクトから、titleプロパティの値を出力することを意味します。
index.jsで、titleプロパティに「Express」の文字列を代入していますので、「<%= title %>」の箇所は「Express」に置き換わることになります。
<!DOCTYPE html> <html> <head> <title><%= title %></title> <link rel='stylesheet' href='/stylesheets/style.css' /> </head> <body> <h1><%= title %></h1> <p>Welcome to <%= title %></p> </body> </html>
3.プロパティを増やしてみる
index.jsとindex.ejsを書き換えて、プロパティを増やしてみます。
まず、index.jsを以下のように書き換えます。
元々のtitleプロパティに加えて、「name」というプロパティを追加し、値を「Taro」にしました。
exports.index = function(req, res){ res.render('index', { title: 'Express', name: 'Taro' }); };
一方、index.ejsも以下のように書き換えます。
10行目の「<p>Hello, <%= name %></p>」で、nameプロパティを出力するようにしてみます。
<!DOCTYPE html> <html> <head> <title><%= title %></title> <link rel='stylesheet' href='/stylesheets/style.css' /> </head> <body> <h1><%= title %></h1> <p>Welcome to <%= title %></p> <p>Hello, <%= name %></p> </body> </html>
この後、アプリケーションを起動してインデックスページにアクセスしてみると、以下の表示になります。
nameプロパティの値が正しく表示できていることが分かります。