Node.js + Express の URLルーティング

0 件のコメント

Node.js + Express において URLルーティング 、特に名前付きパラメーターをどのように指定するかまとめました。

基本

基本のルーティング指定方法は以下の通りです。

構文

1
app.METHOD(PATH, CALLBACK);
METHOD
HTTPリクエストメソッドを小文字で指定します。例:get, post, put, delete
PATH
URLルーティングを指定します。
CALLBACK
URLルーティングが一致したときに実行する処理を指定します。

たとえば、ルートパス / へのルーティングを指定する場合、以下のように指定します。

1
2
3
4
app.get("/", function (request, response) {
  // GET: /
  response.send("Hello World");
});

応用

「応用」では上記「基本」の設定における PATH の指定方法をもう少し掘り下げます。 PATH は特殊な記法を用いることで柔軟な URLルーティング を実現できるようになっています。 以下に具体的な方法を見ていきます。

名前付き パラメーター

コロン ( : ) のプレフィックスで始まる文字列はパラメータとして認識されます。 パラメータ文字列は次のパスセグメントまでをパラメータ文字列として認識します。 パラメータ文字列として利用可能な文字列はアルファベット大文字小文字、数字、アンダースコア [A-Za-z0-9_] になります。

名前付きパラメーターは request.params.PARAMETER_NAME で値を取り出すことができます。

ルート定義 リクエスト例
/api/user/:id
/api/user -
/api/user/ -
/api/user/123 id = "123"
/api/user/abc id = "abc"
/api/user/abc/def -

オプション

サフィックスに クエスチョンマーク ? を付けることで、パラメーターがオプションでることを指定できます。

ルート定義 リクエスト例
/api/user/:id?
/api/user id = undefined
/api/user/ id = undefined
/api/user/123 id = "123"
/api/user/abc id = "abc"
/api/user/abc/def -

0 以上

サフィックスに アスタリスク * を付けることで、0 以上のパラメーターと一致させることができます。

ルート定義 リクエスト例
/api/user/:id*
/api/user -
/api/user/ -
/api/user/123 id = "123"
/api/user/abc id = "abc"
/api/user/abc/def id = "abc"

1 以上

サフィックスに プラス + を付けることで、1 以上のパラメーターと一致させることができるハズ…ですが、 実際試してみると動作的にはサフィックスにプラス + があってもなくても通常の動作と変わらない動作でした。

ルート定義 リクエスト例
/api/user/:id+
/api/user -
/api/user/ -
/api/user/123 id = "3"
/api/user/abc id = "c"
/api/user/abc/def -

カスタムマッチ パラメーター

名前付きパラメーターに対して正規表現で条件指定することができます。 以下の例では数値だけを受け付けるカスタムマッチパラメーターを設定しています。

ルート定義 リクエスト例
/api/user/:id(\\d+)
/api/user -
/api/user/ -
/api/user/123 id = "123"
/api/user/abc -
/api/user/abc/def -

名前なし パラメーター

グループマッチさせる正規表現は名前なしパラメーターとして指定できます。 グループマッチ (.*) の指定は アスタリスク * の省略表記も使えます。 無名なため rquest.params で値を取り出すことはできません。

ルート定義 リクエスト例
/api/user/(\\d+)
/api/user -
/api/user/ -
/api/user/123 -
/api/user/abc -
/api/user/abc/def -

参考記事

最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!