如何处理节点中的url +多个区域查询参数?

我正在restapi。 我有多个可选参数。 这是我采取的解决scheme,但有没有另一种解决scheme? 该url可以

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) 

我build议你应该尝试组织你的应用程序路线,使方法遵循单一职责原则,你所写的每一个函数都应该完成一件事情。 它应该有一个明确的目标。 在上面的getFaq似乎是做了这么多事情。

你最好想把它们分成getAll()getSingle()getTopic()函数,然后把每个委托给负责的路由:

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

这样,unit testing和debugging就更容易了。