【问题标题】:How to achieve DRY routers in expressexpress中如何实现DRY路由器
【发布时间】:2016-09-25 09:08:16
【问题描述】:

我正在构建一个具有基本 CRUD 操作的各种网络形式的 web 应用程序。我正在拆分我的路由器文件,因为它们变得相当大。

我有一个“操作”路线,它可以执行诸如选择要查看的单个帖子、对帖子投票、查看个人资料和推荐用户等操作。我似乎无法找到一种方法让我将这些“操作”路由拆分为单独的文件,然后根据需要在主路由中使用它们。

//index.js file in routes folder 
var express = require('express');
var router = express.Router();

//main route
router.route('/feed')
    .get(function(req, res, next){
    //some code here
    }

//actions.js file in routes folder
var express = require('express');
var router = express.Router();

//vote route
router.route('/vote/:id')
    .post(function(req, res, next){
    //some code here
    }

//item route
router.route('/item/:id')
    .get(function(req, res, next){
    //some code here
    }

我希望能够在提要路线(和其他路线)中使用动作路线,这样我就可以做类似的事情

POST /feed/vote/postid12356
GET /feed/item/itemid123456

甚至在另一个名为“私人馈送”的路由中使用来自操作路由的相同操作

POST /private-feed/vote/postid12356
GET /private-feed/item/itemid123456

无需在许多路线中重复这些操作。

有什么方法可以表达吗?

【问题讨论】:

    标签: javascript node.js express routing


    【解决方案1】:

    您可以将您的路由处理程序提取到一个单独的文件中,我们称它们为controllers,然后在某些路由中重用逻辑:

    //controllers/action.js
    module.exports = {
      get: (req, res, next) => {
         //your post logic
      }
    }
    
    ///routes/item.js
    
    const ActionController = require("../controllers/action");
    router.route('/item/:id').get(ActionController.get);
    module.exports = router;
    

    【讨论】:

    • 因此,例如 item.js 中的每条路由对于每个动作我都会有 router.route('/item/:id').get(ActionController.get); router.route('/vote/:id').get(ActionController.get);等
    • 忘记了上面的回复,做了一些测试并设法让它工作。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多