2015-10-09 52 views
0

我似乎无法找到关于此任何地方的信息。在Express.js路由命名参数

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

但是就像我已经说过了,我一直没能找到如何做到这一点发表任何信息。

我最初的猜测是要做到这一点:

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

但是这完全不是那么回事。 Express有没有办法做到这一点?

+1

'网址/列表/消息=你好ID = 1234'看起来相当不寻常。你不是指'url/list/hello?id = 1234'?看看http://expressjs.com/4x/api.html#router.param –

回答

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的大量如何处理它们的路由。

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看起来像这样:?网址/列表/消息/你好ID = 1234