gpt4 book ai didi

javascript - new URL() - WHATWG URL API

转载 作者:数据小太阳 更新时间:2023-10-29 04:45:15 26 4
gpt4 key购买 nike

我正在摆弄 Node ,我正在尝试获取 URL 类的实例(因为那些方便的属性)。喜欢:

const { URL } = require('url');
(...)
http.createServer((request,response) => {
let uri = new URL(request.url);
(...)
}

但是失败了

TypeError [ERR_INVALID_URL]: Invalid URL: /

这很有趣,因为

const url = require('url');
url.parse();

有效。所以我对此很好奇。我了解后一种方法较旧。

我在本地进行开发,因此要在浏览器中使用 localhost:8000 发送请求。

如何使用request中的信息来实例化一个新的URL对象?

我已经查看过的信息和内容:

node -v
v9.3.0

https://nodejs.org/api/url.html#url_class_url
https://stackoverflow.com/questions/44738065/uncaught-typeerror-url-is-not-a-constructor-using-whatwg-url-object-support-for
https://stackoverflow.com/questions/45047840/in-node-js-how-to-get-construct-url-string-from-whatwg-url-including-user-and-pa
https://stackoverflow.com/questions/47481784/does-url-parse-protect-against-in-a-url
https://stackoverflow.com/questions/17184791/node-js-url-parse-and-pathname-property

最佳答案

正如 Joshua Wise 在 Github (https://github.com/nodejs/node/issues/12682) 上指出的那样,问题在于 request.url 不是绝对 URL。它可以用作路径或相对 URL,但缺少主机和协议(protocol)。

API documentation 之后,您可以通过提供一个基本 URL 作为第二个参数来构造一个有效的 URL。这仍然很尴尬,因为该协议(protocol)不容易从 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: '' }

关于javascript - new URL() - WHATWG URL API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48196706/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com