2017-03-28 2 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

である私は、あなたのアプリのルートを整理しようとする必要がありますことをお勧め〜で単一の責任原則に従うような方法で、あなたが書くすべての関数はちょうど1つのことを行う必要があります。明確に定義された目標を1つ持つ必要があります。上記ではgetFaqはそう多くのことをしているようです。

あなたは理想的getAll()getSingle()getTopic()機能にそれらを分割して、責任をルーティングするために、それぞれを委任したいと思います:

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

それはユニットテストとデバッグが簡単だその方法を。

関連する問題