在Express.js中路由中的命名参数

时间:2015-10-09 14:08:53

标签: javascript rest express url-routing

我似乎无法在任何地方找到相关信息。

我希望能够做到这样的请求:url/list/message=hello?id=1234

但就像我说的那样,我无法在Express中找到关于如何执行此操作的任何信息。

我最初的猜测是这样做:

app.put('/list/message=:msg?id=:id', function (req, res) { ... });

但这不太有用。在Express中有没有办法做到这一点?

2 个答案:

答案 0 :(得分:0)

您所指的通常称为查询字符串,我们在节点中有一个强大的URL解析库来处理这个问题。

试试这个:

require('url');
...
var url_parts = url.parse(req.url, true);
var query = url_parts.query;

然后,如果您更改路线,则可以使用query.id并获取1234

app.put('/list/message=:msg', function (req, res) { ... });

理想情况下,在尝试从中读取之前,应检查query.id是否存在。我还建议不要使用message=:msg。相反,我会将整个事情重写为

app.put('/list/:id', function (req, res) {
  var url_parts = url.parse(req.url, true);
  var query = url_parts.query;
  if (query.message) {...}
});

这与目前的结构略有不同,但更符合大量API处理路由的方式。

答案 1 :(得分:0)

你不能这样做。你能做的是:

app.put('/list/message/:msg', function (req, res) {
  var msg = req.params.msg;

  var url = require('url');
  var id = url.parse(req.url, true).query.id;    
});

您的网址将如下所示:url / list / message / hello?id = 1234