如何从Express中的http请求获取未解析的查询字符串

时间:2012-05-17 21:46:37

标签: node.js express

我可以使用以下内容来获取查询字符串。

  var query_string = request.query;

我需要的是原始未解析的查询字符串。我怎么做到的?对于以下网址,查询字符串为{ tt: 'gg' },我需要tt=gg&hh=jj等....

http://127.0.0.1:8065?tt=gg

Server running at http://127.0.0.1:8065
{ tt: 'gg' }

5 个答案:

答案 0 :(得分:31)

您可以按照URL示例使用node的{​​{3}}模块:

require('url').parse(request.url).query

e.g。

node> require('url').parse('?tt=gg').query
'tt=gg'

或者直接转到substr

后的网址和?
var i = request.url.indexOf('?');
var query = request.url.substr(i+1);

(这是require('url').parse()在幕后做的事情)

答案 1 :(得分:7)

您可以在快递3.x +中使用req.originalUrl。 (较旧的版本可以使用节点的http模块中的req.url。)这应该生成原始字符串,不包括?

var query_index = req.originalUrl.indexOf('?');
var query_string = (query_index>=0)?req.originalUrl.slice(query_index+1):'';
// 'tt=gg&hh=jj' or ''

请注意,如果您有a # to denote the end of the query,则无法识别。

如果您想将字符串传递给新网址,则应包含?

var query_index = req.originalUrl.indexOf('?');
var query_string = (query_index>=0)?req.originalUrl.slice(query_index):'';
// '&tt=gg&hh=jj' or ''
res.redirect('/new-route'+query_string);
// redirects to '/newroute?tt=gg&hh=jj'

答案 2 :(得分:2)

Express使用parseurl_parsedUrl存储在request对象中。可以通过string query访问原始request._parsedUrl.query

答案 3 :(得分:0)

var queryString = Object.keys(request.query).map(key => key + '=' + request.query[key]).join('&');

var queryString = require('querystring').stringify(request.query);

答案 4 :(得分:-1)

如果你希望它是那个“轻量级”,你必须自己写。

var raw = "";
for( key in query_string)
  raw += key + "="+ query_string[key] "&";
if ( raw.indexOf("&") > 0) // To remove the last & since it will produce 'tt=gg&'
   raw = raw.substring(0,raw.length-1);