拙著「FXはチャートで勝つ!」が発売されました。
FX(外国為替証拠金取引)でのチャートの読み方を解説しています。
自由国民社刊で、定価1,728円(消費税込み)です。
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>
