在Nodejs中创建具有不同参数的类似路由

时间:2017-08-05 16:29:31

标签: node.js express

我做了谷歌搜索,但我找不到我真正需要的东西。 我需要查询一个API,它具有相同的路由,但具有不同的参数。

示例:

  

router.get('/ items /:query,function(){})

在这种情况下,我会搜索所有项目

  

router.get('/ items /:id,function(){})

在这里,我会寻找一个特定的项目

2 个答案:

答案 0 :(得分:1)

您的问题的核心是您尝试在同一位置指定两个不同的资源。如果您设计的API遵循宁静的原则,那么您就会明白为什么这不是明智的选择。这里有两个很好的起点:

https://en.wikipedia.org/wiki/Representational_state_transfer

http://www.restapitutorial.com/lessons/whatisrest.html

在restful api中,根资源代表项目集合:

/api/items

...当您指定一个表示您只想要一个项目的ID时:

/api/items/abc123

如果你真的还想完成你在问题中提出的问题,你需要添加一个url参数,例如/ items / query?query = true或/ items / abc123?detail = true但这会让人困惑99%的网络开发人员都会查看您的代码。

此外,我不确定你是否真的这么说,但是当你传递一个名为" query"的变量时到服务器似乎表明您将从客户端向服务器发送SQL查询(或类似的数据定义语言)。出于多种原因,这是一种危险的做法 - 最好将所有这类代码留在您的服务器上。

编辑:如果你真的绝对必须这样做,那么可能有一个查询参数,表示?collection = true。这至少可以被其他可能必须在将来维护代码的开发人员理解。另外,请务必添加评论,以解释为什么您无法实施休息,这样您就不会留下不良声誉:)

答案 1 :(得分:0)

问题在于,如果没有额外的模式匹配,Express就无法区分/items/:query/items/:id,它们是相同的路由模式,只是具有不同的别名参数。

根据您打算构建查询的方式,您可能需要考虑使用路由/items,然后使用查询字符串参数或具有单独的/items/search/:query端点。