Узел JS экспресс-проблема маршрута конфликта - PullRequest
0 голосов
/ 05 ноября 2019

В моем приложении js узла у меня есть следующие маршруты.

router.get('/:id', [auth], asyncHandler(async (req, res) => {
  const post = await postService.getPostById(req.params.id);
  res.json(post);
}));

router.get('/all', [auth], asyncHandler(async (req, res) => {
  const posts = await postService.getAllPosts(req.user.id);
  res.json(posts);
}));

Здесь, когда я вызываю маршрут post / all, происходит сбой. В нем указано: Ошибка приведения к ObjectId для значения "all" по пути "_id" для модели "Post" Сбой приведения к ObjectId для значения "all" по пути "_id" для модели "Post"

Но если я прокомментирую первый маршрут, второй работает отлично. Почему это происходит?

1 Ответ

1 голос
/ 05 ноября 2019

Это потому, что /all также соответствует /:id. Что вам нужно сделать, это переместиться на /all выше /:id:

// Match this first
router.get('/all', [auth], asyncHandler(async (req, res) => {
  const posts = await postService.getAllPosts(req.user.id);
  res.json(posts);
}));

// Then if not /all treat route as the variable `id`
router.get('/:id', [auth], asyncHandler(async (req, res) => {
  const post = await postService.getPostById(req.params.id);
  res.json(post);
}));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...