node.js - 如何在 Node 中处理url+多个可选查询参数?

标签 node.js rest api express query-string

我正在制作一个rest 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)

最佳答案

我建议您尝试以一种遵循单一职责原则的方式组织您的应用程序路由,即您编写的每个函数都应该只做一件事。它应该有一个明确的目标。上面的getFaq似乎做了很多事情。

理想情况下,您希望将它们分为 getAll()getSingle()getTopic() 函数,然后分别委托(delegate)到负责的路线:

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

这样就更容易进行单元测试和调试。

关于node.js - 如何在 Node 中处理url+多个可选查询参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43066696/

相关文章:

java - Spring MVC 和 @RequestParam 与 x-www-form-urlencoded

Node.JS 异步加载模块

python - 无法修改 django rest framework base.html 文件

json - POJO 中的空字段,带有 application/json 和 BeanParam

ruby-on-rails - 如何在 Rails 上使用 rspec 和 capybara 测试 API?

java - Jersey 重用子资源参数验证

javascript - 根据 API 的结果嵌入 YouTube 视频

node.js - 使用 libfaketime 时,setTimeout 在 Mac OS 和 Linux 上的行为不同

javascript - 用 Mongoose 填充字段

node.js - Nodejs 和 Kafka 键控分区器