Экспресс-заказ маршрутизатора для параметров в начале пути URL - PullRequest
0 голосов
/ 12 июня 2019

Я использую экспресс, и я хочу, чтобы URL моего профиля пользователя были такими: example.com/:username

Однако мне все еще нужны другие URL, такие как example.com/login и example.com/view /: id

Если я закажу роутер таким образом, он будет обрабатывать «логин» как имя пользователя при отправке запроса на example.com/login:

router.get('/:username', function (req, res, next) {
  res.render('profile', {data: req.params.username});
})

router.get('/login', function (req, res, next) {
  res.render('login', {data: null});
})

router.get('/view/:id', function (req, res, next) {
  res.render('view', {data: req.params.id});
})

Если я поставлю/: имя пользователя маршрутизатора в конце, все работает правильно.Однако, если кто-то зашел на example.com/view (без идентификатора), мне нужно отправить сообщение об ошибке, что контроллер представления не получил идентификатор.Вместо этого он снова видит его как имя пользователя и вместо этого отправляет сообщение об ошибке, что имя пользователя не существует.

Какой самый чистый способ решить эту проблему?Должен ли я просто добавить маршрутизатор для всех базовых путей URL?(Как то так):

router.get('/login', function (req, res, next) {
  res.render('login', {data: null});
})

router.get('/view/:id', function (req, res, next) {
  res.render('view', {data: req.params.id});
})

router.get('/view', function (req, res, next) {
  res.render('viewError', {data: null});
})

router.get('/:username', function (req, res, next) {
  res.render('profile', {data: req.params.username});
})

1 Ответ

0 голосов
/ 12 июня 2019

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

Приведенное ниже решение использует один маршрут для формата пути /:value, будь то логин, представление или любое имя пользователя, следовательно, вы можете вставить простой if-else-if или переключатель, чтобы передать управление соответствующим контроллерам или просто визуализироватьвид из него.Таким образом, порядок, в котором он должен обрабатываться, не имеет никакого значения.

router.get("/:username", function(req, res, next) {
  if (req.params.username === "login") {
    res.render("login", { data: null });
  } else if (req.params.username === "view") {
    res.render("viewError", { data: null });
  } else {
    res.render("profile", { data: req.params.username });
  }
});

router.get("/view/:id", function(req, res, next) {
  res.render("view", { data: req.params.id });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...