【问题标题】:How to make one router which works with more then one route如何制作一个可以与多条路由一起使用的路由器
【发布时间】:2022-02-14 22:12:41
【问题描述】:

所以我试图创建一个函数来对所有路由进行 crud 操作,但发现一旦我用该函数调用一个路由,它就不适用于任何其他路由,并且只会获取 post put 或 delete 中的项目我的代码中的第一条路线。

我的基础路由器

function baseRouter(Model, outputName) {
  router
    .route("/")
    .get((req, res, next) => {
      getAllData(res, Model, outputName + "s");
    })
    .post((req, res, next) => {
      let data = new Model(req.body);
      addData(res, data, outputName);
    });

  router
    .route("/:id")
    .get((req, res, next) => {
      getDataById(req, res, Model, outputName);
    })
    .put((req, res, next) => {
      let data = req.body;
      updateDataById(req, res, Model, data, outputName);
    })
    .delete((req, res, next) => {
      deleteDataById(req, res, Model, outputName);
    });

  return router;
}

module.exports = baseRouter;

我调用每条路由的代码

const router = require("express").Router();
//all models
const UserModel = require("../models/user.model");
const ContactModel = require("../models/contact.model");
const LinksModel = require("../models/links.model");
const EducationModel = require("../models/education.model");
const SkillModel = require("../models/skills.model");
const ProjectModel = require("../models/projects.model");

//router
const baseRouter = require("./baseRoute");

// all routes crud operation
router.use("/contact", baseRouter(ContactModel, "Contact"));
router.use("/link", baseRouter(LinksModel, "Link"));
router.use("/education", baseRouter(EducationModel, "Education"));
router.use("/skill", baseRouter(SkillModel, "Skill"));
router.use("/project", baseRouter(ProjectModel, "Project"));

module.exports = router;

我希望我正确地解释了我的问题。

【问题讨论】:

    标签: javascript node.js express backend mern


    【解决方案1】:

    尝试将路由器实例和名称字符串传递给您的

    function baseRouter(router, name, Model, outputName) {...}
    

    将其添加到该函数中的路由路径

    .route(`${name}/`)
    

    .route(`${name}/:id`)
    

    并在你的路由器索引中调用它

    baseRouter(router, "contact", ContactModel, "Contact"));
    

    您不必在函数中返回它,因为您直接为路由器实例定义路由,并且可能能够使用一次 "contact" 并将其大写在您需要的地方

    您在路由器索引中实例化您的router,并在以相同方式传递所有定义的路由后将其返回到您的app 索引

    【讨论】:

      猜你喜欢
      • 2017-01-03
      • 2017-09-20
      • 2015-08-13
      • 2012-01-08
      • 2013-11-05
      • 1970-01-01
      • 2016-05-26
      • 2021-09-28
      相关资源
      最近更新 更多