この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
node.jsのフレームワークであるexpressを用いることで、
容易にWebアプリケーションの構築を行うことができます。
今回はExpressを用いた際に、router内での正規表現を用いたURLの指定とそのパラメータの取得方法を紹介します。
前提条件
検証した環境は以下の環境になります。
node.js | v0.10.26 |
以下のURL設計でアクセスするものとします。
アクセスURL | 内容 |
---|---|
/user | ユーザー一覧を表示 |
/user/:id(:idは数字とする。) | ユーザー情報表示 |
/user/regist | ユーザー登録 |
ひな形を作成する
expressでアプリケーションを作成する際に、expressのみをインストールした環境でコマンドを実行しようとするとエラーになる場合があります。
$ express
zsh: command not found: express
これは、expressのひな形生成が別のパッケージになったのが原因です。
ひな形生成のパッケージ名はexpress-generatorになります。
npm install -g express-generator
express -e expressSample
cd expressSample
npm install
routerの実装
ひな形で生成された/router/user.jsをもとに実装を進めていきます。
routes/users.js
var express = require('express');
var router = express.Router();
router.get('/', function(req, res) {
res.send('respond user List');
});
router.get('/:id', function(req, res) {
res.send('respond user Info userid:' + req.params.id);
});
router.get('/regist', function(req, res) {
res.send('respond user Regist');
});
module.exports = router;
動作確認
実装した内容を確認します。
$ npm start
(別シェルを立ち上げます。)
$ curl http://localhost:3000/users/
respond user List%
$ curl http://localhost:3000/users/1
respond user Info userid:1%
$ curl http://localhost:3000/users/2
respond user Info userid:2%
$ curl http://localhost:3000/users/3
respond user Info userid:3%
$ curl http://localhost:3000/users/regist
respond user Info userid:regist%
/users/registへのアクセスが/users/:idのアクセスとして処理されています。
正規表現でregistとそれ以外のアクセスを振り分けを行います。
修正
ユーザーのidを正規表現で振り分けを行うように修正します。
routes/users.js
var express = require('express');
var router = express.Router();
router.get('/', function(req, res) {
res.send('respond user List');
});
router.get('/:id(\\d+)', function(req, res) {
res.send('respond user Info userid:' + req.params.id);
});
router.get('/regist', function(req, res) {
res.send('respond user Regist');
});
module.exports = router;
修正版動作確認
$ curl http://localhost:3000/users/3
respond user Info userid:3%
$ curl http://localhost:3000/users/regist
respond user Regist%
正しくユーザー表示と登録が振り分けられていることが確認できました。
参考サイト
regex - Regular Expression in Node.js Express Router - Stack Overflow