Параметр маршрута с регулярным выражением для захвата всего - PullRequest
0 голосов
/ 30 июня 2018

В моем приложении Node.js (+ express) я ожидаю следующих запросов:

GET /images/foo1/id500/abc5
GET /images/foo2/id540
GET /images/id500/foo800

Другими словами, запросы будут иметь постоянный префикс /images/ и некоторый дополнительный случайный путь, который мне нужно перехватить.

app.get("/images/:foo(*)", (req, res) => {
  console.log(req.params.foo);
  res.send(req.params.foo);
});

Код выше делает именно то, что я хочу, но если я поставлю "." (любой символ) в регулярное выражение, затем он перестает работать ...

Следующий код не работает:

app.get("/images/:foo(.*)", (req, res) => {
  console.log(req.params.foo);
  res.send(req.params.foo);
});

Почему использование :foo(.*) не дает желаемого результата, в то время как :foo(*) или :foo(\\w*) работают должным образом?

1 Ответ

0 голосов
/ 30 июня 2018

Если вы хотите сопоставлять регулярные выражения, вы должны использовать регулярное выражение. Вот разница:

 app.get(/a/, (req, res) => { // Matches anything with an “a” in it, such as /xax.
 app.get('a', (req, res) => { // matches exactly /a

Вы можете переписать свой пример как регулярное выражение, не забудьте экранировать /:

app.get(/\/images\/:foo(.*)/, (req, res) => {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...