2017-02-21 36 views
1

Допустим, у меня есть этот маршрутМогу ли я иметь один экспресс маршрута, но несколько контроллеров в зависимости от запроса

app.route('/upload').post(???); 

Есть ли способ, чтобы маршрут к различным контроллерам на основе строки запроса для Exemple?

Я знаю, что могу просто использовать разные конечные точки, или у меня мог бы быть «главный» контроллер, который действует как реле с корпусом переключателя на правый контроллер, но есть ли другой способ?

Пример: req.query.type === "x", тогда контроллер x вызывается, но если req.query.type === "y", тогда вызывается контроллер y.

+0

Вы ищете что-то подобное http://stackoverflow.com/a/23718541/2829540? –

+0

@KevinAmiranoff Если я правильно понимаю, этот ответ вызывает несколько контроллеров один за другим, как и для меня, он действительно вызывает один из множества вариантов в зависимости от строки запроса – Benoit

+0

Я думаю, что вы просто неправильно проектируете. Параметры запроса должны быть параметрами для данного контроллера. Путь (например, маршрут) должен определять, какой контроллер вызывается. Вы всегда можете взломать что-нибудь (например, у вас есть небольшой код в обработчике маршрута, который решает, какой контроллер вызывать на основе параметров запроса, но я думаю, вам нужно просто исправить дизайн URL, а не взломать его. Например, вам нужно '/ upload/x' и '/ upload/y', а не помещать тип в строку запроса. – jfriend00

ответ

0

Это в основном, как я это делаю, но я стремлюсь увидеть лучшие реализации:

// routes.js 

router 
     .route('/upload') 
     .get(MyController.getUploads); 


// MyController.js 
export default class MyController { 
    static getUploads(req, res) { 
if (req.params.id) { 
     UploadDao 
     .getSingle(req.params.id) 
     .then(upload => res.status(200).json(upload)) 
     .catch(error => res.status(400).json(error)); 
    } else if (req.query.search) { 
     UploadDao 
     .getFilteredList(req.query.search) 
     .then(uploads => res.status(200).json(uploads)) 
     .catch(error => res.status(400).json(error)); 
    } else { 
     UploadDao 
     .getAll() 
     .then(figures => res.status(200).json(figures)) 
     .catch(error => res.status(400).json(error)); 
    } 
} 

Я предполагаю, что переключатель будет лучше начать с.