2017-02-21 36 views
1

多個控制器比方說,我有這樣的路線我可以有一個明確的路線,但根據查詢

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

有沒有辦法路由到基於查詢字符串爲例不同的控制器?

我知道我可以只使用不同的端點,或者我可以有一個「主」控制器,它充當一個開關情況下的中繼到正確的控制器,但有沒有其他辦法?

req.query.type === "x"然後調用控制器x,但如果調用控制器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)); 
    } 
} 

我想一個開關將是更好的開始。

相關問題