快递中的url没有给出正确的查询字符串

时间:2015-08-04 04:34:48

标签: node.js express

我在nodejs中使用expressjs来创建我的api。现在,当我发送一个字符串为" Wed Jul 29 2015 17:34:22 GMT + 0830"在查询字符串中的get请求中并将其解析为url.parse(uri,true).query它给了我一个字符串" Wed Jul 29 2015 17:34:22 GMT 0830"没有' +'。如何获得字符串中的+

使用代码进行更新

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 =位于查询字符串中,其中包含' +'签署类似'星期一2015年8月3日13:27:24 GMT + 0930'

2 个答案:

答案 0 :(得分:1)

您可以将字符串编码为URI格式。

.state('mailVerification', {
    url: "/verifyMail?id",
      templateUrl: "app/views/common/emailVerification.html",
      resolve: {
          id: function($stateParams){
              return $stateParams.id;
          }
      }
      controller: 'accountCtrl',
      data: {
          authorizedRoles: [USER_ROLES.all]
      }
  })

使用encodedString在查询字符串中传递它。

答案 1 :(得分:0)

您可以先用URL编码的版本(url.parse())替换其中的+个字符,而不是让%2b解析查询字符串,然后手动解析查询字符串:

var qs = require('querystring');

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

虽然这假设需要保留查询字符串中的所有 +个字符。如果这不可接受,您可以修改正则表达式以仅匹配特定情况(如时区表示法)。

编辑:结合Express,它看起来像这样:

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