Node.js/Express路由与获取参数

64

假设我有这样的获取路由:

app.get('/documents/format/type', function (req, res) {
   var format = req.params.format,
       type = req.params.type;
});

所以,如果我发出这样的请求:

http://localhost:3000/documents/json/mini

我的格式和类型变量分别为'json'和'mini',但是如果我像这样发出请求:

http://localhost:3000/documents/mini/json

并不是这样。因此,我的问题是:如何以不同的顺序获取相同的变量?


1
你不要认为 documents/mini/jsonformat == minitype == json。URL 不是无序的参数袋子。 - Raynos
2个回答

173

你的路由不正确,应该像这样(使用“:”)

app.get('/documents/:format/:type', function (req, res) {
   var format = req.params.format,
       type = req.params.type;
});

很遗憾,您不能交换参数顺序。

有关req.params(和req.query)的更多信息,请查看此处的API参考。


alessioalex 谢谢您的回复! - Erik
8
你需要对结果进行消毒处理。否则你的网站存在极大的漏洞。 这段代码的意思是,使用一个名为"sanitizer"的模块来对从请求参数中获得的"format"变量进行转义处理,以防止可能会导致安全漏洞的特殊字符被注入进去。建议对最终结果进行消毒处理以确保网站的安全性。 - user3806549

58
对于查询参数例如example.com/test?format=json&type=mini格式,则可以通过req.query.<param>轻松接收它。
app.get('/test', function(req, res){
  var format = req.query.format,
      type = req.query.type;
});

1
谢谢。你的回答对我也有帮助! - Erik
这使得处理一个URL参数变得更加容易。 - pseudosavant
+1 这个回答解决了我来这里寻找的标题问题(实际问题与获取参数无关)。 - Val Kornea

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接