2017-03-28 111 views
2

我正在休息api。我有多個可選參數。這是我採取的解決方案,但是還有其他解決方案嗎? URL可以是如何處理節點中的url +多個otpional查詢參數?

www.myurl.com/ 

www.myurl.com/faqid/22 

www.myurl.com/faqid/22/locale/english 

這是我實現

var getFaq = (req, res) => { 
    let faqDetails = FAQ.map(obj => obj);//it is a mock json for now 
    faqDetails = req.params.faqid ? faqDetails.filter(obj => obj.id == req.params.faqid) : faqDetails; 
    faqDetails = req.params.topic ? faqDetails.filter(obj => obj.topic == req.params.topic) : faqDetails; 
    return res.status(200).send(faqDetails); 
} 
router.get('/:faqid/topic/:topic', getFaq) 
router.get('/:faqid', getFaq) 
router.get('/', getFaq) 

回答

1

我建議你應該嘗試組織您的應用程序路徑在這樣一種方法就是方法遵循單一責任原則,你所寫的每一個函數都應該完成一件事。它應該有一個明確定義的目標。在上面的getFaq似乎是做了這麼多事情。

你會非常想將其劃分到getAll()getSingle()getTopic()功能,然後將每個委託給負責的路線:

router.get('/:faqid/topic/:topic', getTopic) 
router.get('/:faqid', getSingle) 
router.get('/', getAll) 

這樣它更容易單元測試和調試。