如何在express中实现DRY路由器

时间:2016-09-25 09:08:16

标签: javascript node.js express routing

我正在构建一个具有基本CRUD操作的网络形式的webapp。我正在分割我的路由器文件,因为它们变得相当大。

我有一个“行动”路线,可以选择在个人帖子中查看,在帖子上投票,查看个人资料和赞扬用户。我似乎无法找到一种方法允许我将这些“动作”路线分成单独的文件,然后在主路线中根据需要使用它们。

//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
    }

我希望能够使用Feed路线(和其他路线)内的动作路线所以我可以做像

这样的事情
POST /feed/vote/postid12356
GET /feed/item/itemid123456

甚至在另一条名为'private-feed'的路线中使用动作路线中的相同动作

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

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

有什么方法表达可以做到这一点吗?

1 个答案:

答案 0 :(得分: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;