2016-09-25 1 views
0

Я создаю webapp в виде сети с основными CRUD-действиями. Я в процессе разделения моих файлов маршрутизатора, поскольку они становятся довольно большими.Как достичь DRY-маршрутизаторов в expres

У меня есть маршрут «действия», который выполняет такие функции, как выбор в отдельном сообщении для просмотра, голосования на почте, просмотра профиля и оценки пользователя. Я не могу найти способ разрешить мне разбить эти маршруты действий в отдельный файл, а затем использовать их по мере необходимости на основном маршруте.

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

или даже в другой маршрут под названием «частный -Feed», используя одни и те же действия от маршрута действия

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

Без того, чтобы эти действия повторяются во многих маршрутах.

Есть ли способ выразить, что это можно сделать?

ответ

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; 
+0

Так, например, каждый маршрут в item.js я бы для каждого действия router.route ('/ item /: id'). get (ActionController.get); router.route ('/ vote /: id'). Get (ActionController.get); и т. Д. – aleks

+0

Забудьте об этом ответе, проделали некоторые тесты, обманывая его и сумели заставить его работать. Огромное спасибо! – aleks

+0

@aleks добро пожаловать! –