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); ... });