Есть 3 способа объявить маршруты в вашем приложении
Это:
app.get("path", fn)
router.get("path", fn)
router.route("path").get(fn)
Все вышеперечисленные функции используются для генерации маршрутов http-запросов в вашем приложении.
app.get
является наиболее простым и не рекомендуется для более крупных проектов. Причина в том, что он дает меньшую гибкость при обработке маршрутов по сравнению с express.router
. В экспресс-приложениях вы будете иметь дело с промежуточным ПО. Промежуточные программы - это функции, которые выполняются перед функцией контроллера вашего приложения
Например, взгляните на эту строку
app.get("/user", verifyUser, createUser)
; `
Выше verifyUser
- это функция промежуточного программного обеспечения, которая вызывается с помощью (Request, Response, Next) arguments by the express framework, you can write your incoming request verification logic in verifyUser and can then call
NextFunction to pass the control to the next function with is the
createUser controller
;
В объявлении маршрута вы можете иметь столько промежуточного программного обеспечения, сколько захотите.
Что делать, если вам нужно звонить verifyUser
каждый раз, когда пользователь создается, удаляется, выбирается или изменяется. Для каждого из действий вам нужно определить свои маршруты следующим образом:
app.get("/user", verifyUser, fetchUser);
app.put("/user", verifyUser, updateUser);
app.post("/user", verifyUser, createUser);
app.delete("/user", verifyUser, deleteUser);
В более крупных приложениях вам нужно определять разные логики для разных объектов и маршрутов.
express.router
решает вышеуказанную проблему, предоставляя нам гибкость в определении того, что делать, когда пользователь проходит маршрут /user
перед передачей запроса промежуточному программному обеспечению.
Приведенный выше код в экспресс-роутере можно записать следующим образом:
// file: userRoutes.js
const router = express.Router();
router.use((req, res, next) => {
verifyUser(req, res, next);
});
function verifyUser(req, res, next) {
// verification logic here
if (/** verification is successful */)
return next(); // return to the controller
res.status(400).json({ msg: "user does not exists" });
}
router.get("/user", fetchUser);
router.put("/user", updateUser);
router.post("/user", createUser);
router.delete("/user", deleteUser);
module.exports = router;
// app.js
const userRoutes = require("./userRoutes");
app.use(userRoutes);
Все становится действительно проще, если мы будем цеплять методы HTTP-запроса следующим образом:
router.route("/user")
.get(fetchUser);
.put(updateUser);
.post(createUser);
.delete(deleteUser);
Примечание. Вышеуказанный код предназначен только для пояснения, возможны синтаксические ошибки, код не должен работать как есть. Пользователю может потребоваться изменить код, чтобы он работал.