如何在节点中处理url +多个otpional查询参数?

时间:2017-03-28 10:10:20

标签: node.js rest api express query-parameters

我正在休息api。我有多个可选的参数。这是我采取的解决方案,但还有另一种解决方案吗? 网址可以是

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 个答案:

答案 0 :(得分:1)

我建议您尝试组织您的应用程序路径,使方法遵循单一责任原则,您编写的每个函数都应该完成一件事。它应该有一个明确定义的目标。在上面getFaq似乎做了很多事情。

理想情况下,您希望将它们分为getAll()getSingle()getTopic()个函数,然后将每个函数委派给负责的路径:

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

这样,单元测试和调试就更容易了。