Я создаю приложение с помощью 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));

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

0
Martin 24 Окт 2019 в 16:28

1 ответ

Лучший ответ

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

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, но с практической точки зрения вы бы никогда не использовали Это.

0
Victor Parmar 24 Окт 2019 в 13:42