поймать множественный маршрут в expressjs - PullRequest
1 голос
/ 26 сентября 2019

в expressjs, я использую маршрутизацию, как показано ниже;

app.use('/game', require("./routes/game"));

в файле /routes/game.js

const express = require('express');  
var router = express.Router();

router.get("s", function (req, res, next) {
    res.send("GAME LIST");
})
router.get("/:gameurl", function (req, res, next) {
    res.send(`GAME: ${req.params.gameurl}`);
})

module.exports = router;

Я бы хотел поймать как /games, так и /game/wow
Как мне справиться с обоими маршрутами по отдельности?

Ответы [ 2 ]

1 голос
/ 26 сентября 2019

Если вы хотите, чтобы и /games, и /game обращались к вашему маршрутизатору, но не указывали другие пути верхнего уровня, существует несколько способов указать его.Вы можете увидеть их описанные здесь, в документе .Например, вы можете использовать регулярное выражение или передать несколько строк.В этом случае я покажу вам несколько строк:

 app.use(["/game", "/games"], require("./routes/game"));

Для пути маршрута вы можете передать одну строку, шаблон пути (подмножество Express для регулярных выражений), регулярное выражение илимассив, содержащий любую их комбинацию.

Если вы хотите узнать разницу между /game и /games в вашем роутере, то вам придется проверить req.originalUrl, чтобы выяснить, какая из них вызвалаэто перейти к вашему маршрутизатору, который, как мне кажется, в некотором роде побеждал часть цели маршрутизации.

Таким образом, отправка двух отдельных путей верхнего уровня на один и тот же маршрутизатор и маршрутизация их по-разному внутри маршрутизатораэто не дизайн, который хорошо работает с Express.Лично я бы либо изменил схему своего пути, чтобы этого не произошло, либо использовал бы два маршрутизатора, поскольку они лучше соответствуют механике маршрутизатора.

0 голосов
/ 26 сентября 2019

вы можете сделать что-то вроде этого

app.use('/', require("./routes/game"));

в файле /routes/game.js

const express = require('express');  
var router = express.Router();

const base = '/game';

router.get(`${base}s`, function (req, res, next) {
    res.send("GAME LIST");
})
router.get(`${base}/:gameurl`, function (req, res, next) {
    res.send(`GAME: ${req.params.gameurl}`);
})

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