如何从Express中的http请求中获取未parsing的查询string

我可以使用下面的查询string。

var query_string = request.query; 

我需要的是原始未分析的查询string。 我如何得到这个? 对于下面的url查询string是{ 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' } 

       

网上收集的解决方案 "如何从Express中的http请求中获取未parsing的查询string"

按照这个例子,你可以使用node的URL模块:

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

例如

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

或者直接去url和substr之后?

 var i = request.url.indexOf('?'); var query = request.url.substr(i+1); 

(这是什么require('url').parse()在引擎盖下)

你可以在3.x +中使用req.originalUrl 。 (旧版本可以使用来自节点的http模块的req.url 。)这应该产生原始string,不包括?

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

请注意,如果您有一个#来表示查询的结尾 ,它将不会被识别。

如果你想将string传递给一个新的URL,你应该包含?

 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' 

如果你想要它是“轻量级” ,你必须自己写。

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

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