Как получить строку unparsed запроса из http-запроса в Express
Я могу использовать ниже, чтобы получить строку запроса.
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' }
Ответы
Ответ 1
Вы можете использовать node
URL в соответствии с this пример:
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()
делает под капотом)
Ответ 2
Вы можете использовать req.originalUrl
в express 3.x+. (Более старые версии могут использовать req.url
из node http module.) Это должно произвести необработанную строку, исключая ?
:
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
Если вы хотите, чтобы это было "легким", вам нужно написать его самостоятельно.
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);
Ответ 4
Express использует parseurl
, в котором хранятся _parsedUrl
в объекте request
. Оригинальный строковый запрос можно получить через request._parsedUrl.query
.