正如 Joshua Wise 在 Github 上指出的那样(https://github.com/nodejs/node/issues/12682 https://github.com/nodejs/node/issues/12682),问题是request.url
不是绝对 URL。它可以用作路径或相对 URL,但缺少主机和协议。
继API文档 https://nodejs.org/api/url.html#new-urlinput-base,您可以通过提供基本 URL 作为第二个参数来构造有效的 URL。这仍然很尴尬,因为该协议不容易从request.headers
。我只是假设 HTTP:
var baseURL = 'http://' + request.headers.host + '/';
var myURL = new URL(request.url, baseURL);
这显然不是一个理想的解决方案,但至少您可以利用查询字符串解析。例如,
URL {
href: 'http://localhost:8080/?key1=value1&key2=value2',
origin: 'http://localhost:8080',
protocol: 'http:',
username: '',
password: '',
host: 'localhost:8080',
hostname: 'localhost',
port: '8080',
pathname: '/',
search: '?key1=value1&key2=value2',
searchParams: URLSearchParams { 'key1' => 'value1', 'key2' => 'value2' },
hash: '' }