Разница между app.get и router.get (Express) - PullRequest
1 голос
/ 27 января 2020

Я лично предпочитаю первый подход, так как чувствую, что он хранит мои логики c внутри контроллера, и мои маршруты становятся совершенно очевидными, когда все, что они делают, это используют метод из контроллера и сопоставляют его с маршрутом.

Но я очень младший разработчик, и я постоянно нахожу, что люди больше используют второй подход. Кто-нибудь с большим знанием, чем я могу объяснить мне, если мой подход плох и почему. Я понимаю и то и другое, но, как я уже сказал, я только начинаю свою карьеру разработчика, и мне нужно сделать свой код читабельным / простым, поэтому мне нужно узнать, какой подход лучше для какого случая.

Спасибо!

//this is /routes/product.ts

import product from "../controllers/Product";


module.exports = function(app: Application) {
  app.get("/api/product", product.getAll);
  app.post("/api/product", product.create);
  app.get("/api/product/:_id", product.getOne);
  app.put("/api/product/:_id/edit", product.update);
  app.delete("/api/product/:_id", product.delete);
};



---------------------------------------------------
//this is app.ts

import express, { Application } from "express";

class App {
  app: Application;

  constructor() {
    this.app = express();
    this.routes();
  }


  routes() {
    require("../routes/product")(this.app);
  }
 
  }
}
export default App;

//this is .routes/index.ts
import { Router, Request, Response } from "express";
import Product from "../models/Product";


const router = Router();

router
  .route("/create")
  .get((req: Request, res: Response) => {
    res.render("product/create");
  })
  .post(async (req: Request, res: Response) => {
    const { title, description } = req.body;
    const newProduct = new Product({ title, description });
    await newProduct.save();
    res.redirect("/product/list");
  });
  
  
export default router;



----------------------------------------------------

//this is app.ts

import express, { Application } from "express";

import indexRoute from "./routes/index";

class App {
  app: Application;

  constructor() {
    this.app = express();
    this.routes();
  }

  routes() {
    this.app.use(indexRoute);

  }
}
export default App;

1 Ответ

1 голос
/ 27 января 2020

Нет абсолютно никакой разницы, на самом деле, app на самом деле является внутренним маршрутизатором (или, по крайней мере, использует его внутренне).

Основные преимущества использования маршрутизатора:

  • Промежуточное ПО на уровне маршрутизатора, ваш подход будет означать, что любое добавленное промежуточное ПО будет применяться для всех маршрутов.
  • Маршрутизатор На уровне обработки ошибок вы можете перехватить ошибку и остановить ее появление в глобальном обработчике ошибок (при необходимости).
  • Относительные URL, ваш подход означает, что вам нужно указывать полный подпуть каждый раз, т.е. /api/products/:_id/edit Vs /:_id/edit
  • Плагин роутеров действительно хорош для Express (они работают так же, как и любое другое промежуточное программное обеспечение)
  • Легче для модульного тестирования при необходимости
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...