обработка идентичных экспресс-маршрутов - PullRequest
0 голосов
/ 24 октября 2019

Я создаю приложение с помощью NodeJS / Express / Mongoose и пытаюсь добавить пользовательский маршрут приостановки, хотя я пытаюсь определить, как следует определять маршруты, чтобы избежать дублирования.

В настоящее время у меня есть эти маршруты для создания нового профиля пользователя и последующего редактирования этого профиля, оба из которых ссылаются на модель пользователя.

router.get("/users/:id", isLoggedIn, asyncErrorHandler(getUserProfile));

router.put("/users/:id", isLoggedIn,(updateUserProfile));

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

Однако сейчас я создаю отдельный маршрут «приостановить пользователя», который будет обновляться отдельным администратором / модератором. Новый маршрут работает нормально, чтобы вызвать форму:

router.get("/users/:id/suspend", isLoggedIn, asyncErrorHandler(getSuspendUser));

Но когда дело доходит до маршрута пут, он также ссылается на ту же модель пользователя для обновления, так как я могуизбежать дублирования вышеописанного маршрута (который, на мой взгляд, не разрешен)?

router.put("/users/:id", isLoggedIn, asyncErrorHandler(putSuspendUser));

Заранее спасибо.

1 Ответ

0 голосов
/ 24 октября 2019

Я бы настоятельно рекомендовал отделить маршруты администратора от обычного маршрута. Это должно решить все проблемы:

router.get("/users/:id", isLoggedIn, asyncErrorHandler(getUserProfile));
router.put("/users/:id", isLoggedIn,(updateUserProfile));

router.get("/admin/users/:id/suspend", isLoggedIn, asyncErrorHandler(getSuspendUser));
router.put("/admin/users/:id", isLoggedIn, asyncErrorHandler(putSuspendUser));

Затем вы можете добавить дополнительное промежуточное ПО, которое проверяет, действительно ли пользователь является администратором на маршрутах администратора:)

Выполнение GET на /admin/users/:id - это бездействие, если вы хотите, чтобы вы могли просто повторно использовать код, чтобы вернуть пользователя согласно GET /users/:id, но, фактически, вы никогда не будете его использовать.

...