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

Tam*_*mpa 19 node.js express

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

  var query_string = request.query;
Run Code Online (Sandbox Code Playgroud)

我需要的是原始未解析的查询字符串.我怎么做到的?对于下面的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' }
Run Code Online (Sandbox Code Playgroud)

Per*_* P. 31

您可以使用示例中nodeURL模块:

require('url').parse(request.url).query
Run Code Online (Sandbox Code Playgroud)

例如

node> require('url').parse('?tt=gg').query
'tt=gg'
Run Code Online (Sandbox Code Playgroud)

或者直接去网址和substr之后?

var i = request.url.indexOf('?');
var query = request.url.substr(i+1);
Run Code Online (Sandbox Code Playgroud)

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

  • 现在不鼓励使用“parse”方法。使用 `new URL(req.url).search` 代替,或者使用 `new URL(req.url, 'https://yourbasehere.com/').search` 如果您不确定 `reg.url` 是否是绝对或相对。请参阅:https://nodejs.org/dist/latest-v14.x/docs/api/url.html#url_url_search (3认同)

Kei*_*ith 7

您可以req.originalUrl在快递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 ''
Run Code Online (Sandbox Code Playgroud)

请注意,如果您要用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'
Run Code Online (Sandbox Code Playgroud)