如何在节点中处理 url+多个可选查询参数?
How to handle url+multiple otpional query params in node?
我在休息api。我有多个可选参数。这是我采取的解决方案,但还有其他解决方案吗?
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)
我建议您尝试组织您的应用程序路由,使方法遵循单一职责原则,即您编写的每个函数都应该只做一件事。它应该有一个明确定义的目标。上面的getFaq
好像做了很多事情。
理想情况下,您希望将它们划分为 getAll()
、getSingle()
和 getTopic()
函数,然后将每个函数委托给负责的路由:
router.get('/:faqid/topic/:topic', getTopic)
router.get('/:faqid', getSingle)
router.get('/', getAll)
这样更容易进行单元测试和调试。
我在休息api。我有多个可选参数。这是我采取的解决方案,但还有其他解决方案吗? 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)
我建议您尝试组织您的应用程序路由,使方法遵循单一职责原则,即您编写的每个函数都应该只做一件事。它应该有一个明确定义的目标。上面的getFaq
好像做了很多事情。
理想情况下,您希望将它们划分为 getAll()
、getSingle()
和 getTopic()
函数,然后将每个函数委托给负责的路由:
router.get('/:faqid/topic/:topic', getTopic)
router.get('/:faqid', getSingle)
router.get('/', getAll)
这样更容易进行单元测试和调试。