2017-09-25 7 views
0

私はこの表現がルート定義の正規表現パターンを扱っていることはほぼ肯定的ですが、やはりパターンに存在する可能性があります、私を容赦してください)。私の急行ルート定義では、私は、ルートパスに番号と一致するようにしようとしています。今のところ正規表現の正規表現では正規表現のパラメータが完全には取り込まれていない

const router = express.Router() 

// pattern: ignore first capture (/) 
router.route(/^(?:\/)(\d+)$/) 
    .get(...callback) 

、捕獲数は、任意の長さにすることができるという。だから、URLが:http://localhost:8000/1234の場合、完全な番号がキャプチャされていないことを除いて、期待通りに機能しています。コールバックにリクエストパラメータを記録すると、{ '0', '4' }が得られます。ご覧のとおり、最後の数字は4、数字は1234です。何がうまくいかないのですか?私はここで精力的に頭を掻いている。正規表現をregexrとノードREPL:/^(?:\/)(\d+)$/.exec('1234')[1] === '1234'の両方でテストすると、正しく一致しているようです。どのような助けや洞察力があれば幸いです。ありがとう。

[EDIT]:@Tolseeによって示唆されるように、私はV 4.15.5(最新版)にV 4.15.3から私の速達のパッケージをアップグレードしました。これは問題を解決するように思われた。今、私の正規表現パターンはそのルートのために働いています。私は問題が古いエクスプレスパッケージにあると推測しています。

+1

あなたのルートの番号がパラメータである場合、それは 'router.route( '/:id')' – nilobarp

+0

で捕捉できます。これについて考えるべきです。私は別のルートのためのパターンを使用した後、私の心はまだ正規表現モードであると思います。私はあなたの応答に感謝します。あなたのアプローチがうまくいきましたが、ここでは正規表現のアプローチがなぜ失敗しているのか不思議です。 –

+1

どのExpressのバージョンを使用していますか? '4.15.5'では完璧に動作します。そして、あなたは 'req.params'が' {'0'、 '4'} 'req.params'ではなくjsオブジェクトであることを示していますか? – Tolsee

答えて

0

ここではRegexpを使用しないでください。/:id/docs)の方が良いでしょう。

使用Regexpそれでもたい場合は、してみてください/^\d+(?:\/(?=$))?$/i

は、それはあなたに役立つことを願っています!

+0

パス内のルートパラメータの名前を使用して、ここで問題を解決したことは間違いありません。ありがとうございます。さて、あなたの正規表現のパターンを私のルートで試しましたが、うまくいかないようです。また、エクスプレスパッケージをv4.15.3からv4.15.5にアップグレードしました(@Tolseeのように^^)。これは、ルート定義の正規表現パターンの問題を解決するように思えました。私はそれが明白な問題であったと推測しています。 –