При использовании Express Router эти две линии эквивалентны? - PullRequest
0 голосов
/ 30 июня 2019

Я не смог найти официальные документы в поиске Google . Где официальные документы API для express.Router () и строки 1 и 2 одинаковы?

Если это так, то это просто вопрос предпочтений?

const express = require('express');
const router = express.Router();

router.get('path', callback); // line 1
router.route('path').get(callback); // line 2

1 Ответ

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

Есть 3 способа объявить маршруты в вашем приложении

Это:

  1. app.get("path", fn)
  2. router.get("path", fn)
  3. 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);

Примечание. Вышеуказанный код предназначен только для пояснения, возможны синтаксические ошибки, код не должен работать как есть. Пользователю может потребоваться изменить код, чтобы он работал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...