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

问题描述 投票:0回答:4

我可以使用下面的代码来获取查询字符串。

  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' }
node.js express
4个回答
50
投票

您可以按照

this
示例使用 nodeURL 模块:

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

例如

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()
在幕后所做的)


7
投票

您可以在 Express 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

#
表示查询结束,则不会被识别。

如果要将字符串传递到新 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'

3
投票

Express 使用

parseurl
_parsedUrl
存储在
request
对象中。原始字符串查询可以通过
request._parsedUrl.query
访问。


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

var queryString = require('querystring').stringify(request.query);
© www.soinside.com 2019 - 2024. All rights reserved.