34

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

  var query_string = request.query;

我需要的是未解析的原始查询字符串。我怎么得到它?对于下面的 url,查询字符串是{ 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' }
4

4 回答 4

43

您可以按照示例使用node's URL模块:

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()引擎盖下的作用)

于 2012-05-17T22:34:23.363 回答
7

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

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'
于 2016-03-24T20:53:50.773 回答
3

Express 使用parseurl哪些存储_parsedUrlrequest对象中。原始字符串查询可以通过request._parsedUrl.query.

于 2017-11-07T20:56:57.270 回答
1
var queryString = Object.keys(request.query).map(key => key + '=' + request.query[key]).join('&');

或者

var queryString = require('querystring').stringify(request.query);
于 2020-08-11T12:13:59.230 回答