「WordPressで学ぶPHP(1)変数・制御構造編」が発売されました。
「WordPressで学ぶPHP」シリーズの第1巻で、WordPressを通してPHPを学んでいく本です。
この本では、PHPの基本となる変数と制御構造について解説します。
Kindle本で、定価500円です。
Node.jsを学ぶ(その10・Expressでアドレスに応じて処理を分ける・事例)
一昨日の「Expressでアドレスに応じて処理を分ける」の話に基づいて、簡単な事例を作ってみます。
1.事例
「http://・・・/entry/1」「http://・・・/entry/2」「http://・・・/entry/○」(○は1と2以外)にアクセスされたときに、以下のそれぞれの情報を出力することにします。
ID | タイトル(title) | 本文(text) |
---|---|---|
1 | Node.js | V8エンジンをベースにした汎用JavaScript処理系。 |
2 | Express | Node.js用のWebアプリケーションフレームワーク。 |
1/2以外 | エラー | お探しのページが見つかりませんでした。 |
2.app.js
アプリケーションを作成した後、app.jsに以下の網掛けの行を追加します。
なお、ビューのテンプレートエンジンとしてEJSを使います(アプリケーションを作成する際に、expressコマンドに「-e」のオプションを指定)。
var express = require('express') , routes = require('./routes') , user = require('./routes/user') , entry = require('./routes/entry') , http = require('http') , path = require('path'); var app = express(); // all environments app.set('port', process.env.PORT || 3000); app.set('views', __dirname + '/views'); app.set('view engine', 'ejs'); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(app.router); app.use(express.static(path.join(__dirname, 'public'))); // development only if ('development' == app.get('env')) { app.use(express.errorHandler()); } app.get('/', routes.index); app.get('/users', user.list); app.get('/entry/:entry_id', entry.show); http.createServer(app).listen(app.get('port'), function(){ console.log('Express server listening on port ' + app.get('port')); });
4行目では、「entry」のルーターオブジェクトを読み込んでいます。
また、28行目では、「/entry/ID」の形のアドレスにアクセスがあった時に、entryオブジェクトのshowメソッドを実行するようにしています。
2.entry.js
アプリケーションのディレクトリの中の「routes」ディレクトリに、「entry.js」のファイルを作り、ルーターのオブジェクトとして動作するようにします。
entry.jsの内容は以下のようにします。
exports.show = function(req, res){ var id = req.params.entry_id; var entry; if (id == 1) { entry = { title: 'Node.js', text: 'V8エンジンをベースにした汎用JavaScript処理系。' }; } else if (id == 2) { entry = { title: 'Express', text: 'Node.js用のWebアプリケーションフレームワーク。' }; } else { entry = { title: 'エラー', text: 'お探しのページが見つかりませんでした。' }; } res.render('entry', { id: id, title: entry.title, text: entry.text }); };
2行目の文で、変数idに、アドレスのIDの部分(/entry/○○)を読み込みます。
次に、その値に応じて、タイトル(title)と本文(text)を変数entryに代入します(3~21行目)。
そして、id/タイトル/本文を元に、「entry.ejs」というビューのファイルを使って、ページをレンダリングします。
3.entry.ejs
ビュー(entry.ejs)の内容は、以下のようにします。
ルーターから渡されたid/title/textの各変数の値を、title要素等に出力し、ページをレンダリングします。
<!DOCTYPE html> <html> <head> <title><%= title %></title> <link rel='stylesheet' href='/stylesheets/style.css' /> </head> <body> <h1><%= title %>(ID = <%= id %>)</h1> <p><%= text %></p> </body> </html>