8

RESTリクエストを正しいコントローラーとアクションにルーティングするルーターを構築する必要があります。ここにいくつかの例があります:

POST /users
GET /users/:uid
GET /users/search&q=lol
GET /users
GET /users/:uid/pictures
GET /users/:uid/pictures/:pid

ルーティングは不可欠であり、すべての要求で実行されるため、単一の正規表現を使用し、可能な限り適切にすることが重要です。

最初に、URLの:(終了するまでまたは次のスラッシュ/まで)を正規表現に置き換える必要があります。これを使用して、後でURLをリクエストURLで検証できます。

これらの動的ルーティングを正規表現に置き換えるにはどうすればよいですか?「:」で始まり「/」で終わる文字列、文字列の終わり、または「&」を検索する場合と同様です。

これは私が試したものです:

var fixedUrl = new RegExp(url.replace(/\\\:[a-zA-Z0-9\_\-]+/g, '([a-zA-Z0-0\-\_]+)'));

何らかの理由で動作しません。:idを正規表現に置き換える正規表現を実装する方法、または実際のリクエストURLと比較するときにそれらを無視する方法を教えてください。

手伝ってくれてありがとう

4

1 に答える 1

17

:[^\s/]+コロンで始まるパラメーターの一致に使用します(一致してから、空白:を除いてできるだけ多くの文字)。/

代わりに、([\\w-]+)任意の英数字を-照合_するために使用しています。また、キャプチャグループでは、照合されたパラメータの使用にも関心がある場合に使用します。

var route = "/users/:uid/pictures";
var routeMatcher = new RegExp(route.replace(/:[^\s/]+/g, '([\\w-]+)'));
var url = "/users/1024/pictures";

console.log(url.match(routeMatcher))
于 2012-08-04T15:03:59.697 に答える