expressjs中的url没有给出正确的查询string

我在nodejs中使用expressjs来创build我的api。 现在,当我发送一个string为“Wed Jul 29 2015 17:34:22 GMT + 0830”在查询string中的获取请求,并parsing它为url.parse(uri,true).query它给了我一个string作为“ Wed Jul 29 2015 17:34:22 GMT 0830“没有”+“。 我怎样才能得到string中的+

用代码更新

getEventTimeFromurl: function(ctx){ var decodeURI = decodeURIComponent(ctx.req.url); var eventTime = undefined; const strEventTime = "eventTime="; var eventTimeindex = decodeURI.search(strEventTime); if (eventTimeindex == -1) throwError.badRequest(ctx, 101, 'Invalid event time'); var aftereventtime = decodeURI.substring(eventTimeindex + strEventTime.length); var endIndex = aftereventtime.indexOf('&'); if (endIndex == -1) eventTime = aftereventtime; else eventTime = aftereventtime.substring(0, endIndex); return eventTime; } 

这里的eventTime =在查询string中有'+'符号,如'Mon Aug 03 2015 13:27:24 GMT + 0930'。

您可以将string编码为URI格式。

 var dateString = "Wed Jul 29 2015 17:34:22 GMT+0830"; var encodedString = encodeURIComponent(dateString); 

使用encodedString在查询string中传递它。

而不是让url.parse()parsing查询string,你可以先用它的URL编码版本( %2b )replace其中的任何+字符,然后手动parsing查询string:

 var qs = require('querystring'); var querystring = url.parse(uri).query.replace(/\+/g, '%2b'); var query = qs.parse(querystring); 

虽然这假定查询string中的所有 +字符需要保留。 如果这是不可接受的,你可能可以修改正则expression式来匹配特定的情况(如在时区标记中)。

编辑 :结合快递,它会看起来像这样:

 app.get('/', function(req, res) { var querystring = url.parse(req.url).query.replace(/\+/g, '%2b'); var query = qs.parse(querystring); ... });