ExpressJS маршрутизатор получает другие параметры запроса по сравнению с app.use - PullRequest
0 голосов
/ 12 апреля 2020

Если я go до https://example.com/random

const router = express.Router();
router.get("*", (req, res, next) => {
  console.log(req.params);
});
app.use("*", router);

Я получаю

{'0': '/'}

как вывод, где, как будто я делаю

app.use("*", (req, res, next) => {
  console.log(req.params);
});

Я получаю, как ожидалось

{'0': '/ random'}

Это ожидаемое поведение или какая-то ошибка или я где-то ошибаюсь?

1 Ответ

0 голосов
/ 12 апреля 2020

Я думаю, что в вашем первом примере вы намерены использовать все запросы router, поэтому вы должны сделать следующее:

const router = express.Router();
router.get("*", (req, res, next) => {
  console.log(req.params);
});
app.use("/", router);

Это говорит приложению использовать router для всего, что начинается с / (root) и отправит /random на ваш get, как и ожидалось.

Причина, по которой вы получили то, что вы видели, заключается в том, что использование app.use("*",router) означает "принять что-либо как root и отправьте router. В случае "/ random" он обработал его как root полностью и отправил все после него на маршрутизатор.

Например, если вместо этого вы сказали app.use('/random',router) затем попробовал этот URL:

http://example.com/random/hello/there

Вы бы увидели, что get будет вызван с /hello/there (ie, все после строки соответствия).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...