new URL() - WHATWG URL API

2024-04-04

我正在摆弄节点,并试图获取 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 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: '' }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

new URL() - WHATWG URL API 的相关文章

随机推荐

  • SQLAlchemy 中的 VALUES 子句

    有没有办法建立一个QuerySQLAlchemy 中的对象相当于 SELECT FROM VALUES 1 2 3 AS sq 从我在文档中看到的 VALUES子句仅出现在与INSERT 现在 这在 SQLAlchemy 中本身就可用 您的
  • 通知通知时发生 TransactionTooLargeException

    我在 android 中录制时有更新时间 我使用 CountDownTimer 并根据通知更新到远程视图 我已经优化了最小的 数据但仍然得到 TransactionTooLargeException public void showNoti
  • 将 DMS 坐标转换为 R 中的十进制

    我有以下 DMS 格式的坐标 我需要将它们转换为十进制 Libraries gt library sp gt library magrittr Latitide Longitude as strings gt lat lt 21d11m24
  • C:赋值中的类型不兼容

    我正在编写一个程序来检查端口是否在 C 中打开 特别是其中一行将参数之一复制到 char 数组 然而 当我尝试编译时 它说 错误 类型不兼容 任务 这是代码 错误在于分配addr include
  • 如何从纯 python 创建 yaml 文件?

    示例来自将 YAML 与 Python 结合使用 http mikkel elmholdt dk p 4 原始 YAML 文件包含此内容 tree format treeroot branch1 name Node 1 branch1 1
  • Apache Beam 中的异步 API 调用

    正如标题所说 我想使用 python 在 apache beam 中进行异步 API 调用 目前 我正在为 Pcollection 中的每个元素调用 DoFn 内的 API 自由度代码 class textapi call beam DoF
  • Material UI 中的相同高度的卡片

    尝试使用 3 张水平卡片 但高度相同且响应灵敏 Like 卡A 卡 B 卡C 覆盖渲染组件
  • 切换 elseif 来切换 case

    我们如何将下面的 if else 语句切换为 switch case 语句 任何人都可以帮忙解决这个问题 if Webcc1 Contains licensePartID dtExpiryDate dtActivatedDate AddYe
  • 在 Android APK 中嵌入版本详细信息

    我的代码存储在SVN版本控制中 我使用 Eclipse 来构建我的 Android 应用程序 在我的应用程序中 我有一个关于框 我想在其中显示正确的源代码控制修订版 标签 任何内容 有没有一种方法可以自动执行此操作 以便我在 关于 框中的版
  • 如何在 Ruby 中拆分字符串并获取除第一个之外的所有项目?

    字符串是ex test1 test2 test3 test4 test5 当我使用 ex split first 它返回 test1 现在我想获取剩余的项目 即 test2 test3 test4 test5 如果我使用 ex split
  • 默认情况下,鼠标单击是否会将键盘焦点带到可聚焦控件上?

    这个问题看起来很奇怪 但根据我的经验 我已经习惯了只需用鼠标单击即可将键盘焦点设置到可聚焦元素 但是 UserControl 具有以下属性Focusable true and IsTabStop true让我感到惊讶的是 它通过 Tab 获
  • 如何监控 TensorFlow 估计器训练中的验证损失?

    我想问一个关于如何在 TensorFlow 估计器的训练过程中监控验证损失的问题 我查过类似的问题 估计器训练期间的验证 https stackoverflow com questions 45417502 validation durin
  • 如何在 MATLAB 中执行此累积和?

    我想计算第 2 列中的值的累积和dat txt下面是第 1 列中的每个字符串 所需的输出显示为dat2 txt dat txt dat2 txt 1 20 1 20 20 20 0 1 22 1 22 42 20 22 1 20 1 20
  • 解析树和抽象语法树(AST)有什么区别?

    它们是由编译过程的不同阶段生成的吗 或者它们只是同一事物的不同名称 这是基于表达评估器 http www antlr3 org works help tutorial calculator html泰伦斯 帕尔的语法 本例的语法 gramm
  • 修复了左侧的侧边栏菜单和顶部的固定标题

    所以我想做的是一个固定的侧边栏 顶部有一个固定的菜单 中间的内容可以滚动 body html height 100 margin 0 aside background 90EE90 height 100 left 0 position fi
  • validateRequest="false" 不起作用,即使 requestValidationMode="2.0"

    我有一个在 Visual Studio dev fabric azure 项目 中运行的 ASP NET 网站 并且正在使用 ACS 和 WIF 我的身份验证过程无法正常工作 因为登录后我收到以下信息 A potentially dange
  • Node.js 中的客户端-服务器通信

    我最近开始使用 Node js 来制作一个在线游戏 用于教育 通过阅读各种教程 我想出了如下所示的简单代码 使用我拥有的代码 我能够进行客户端 服务器通信 这基本上是我制作游戏所需的全部内容 只有一个问题 只有客户端可以发起会话 而服务器只
  • 在 gridview 中显示数据库中的数据

    有谁知道如何将数据库条目放入android中的gridview中 或者是否有一个教程解释了如何做到这一点 请通过提供完整的示例来帮助我 您将需要使用游标适配器 http developer android com reference and
  • 当片段更改时如何更新视图?

    我有一个活动 其中有 2 个 sherlockfragment 前两个页面显示带有自定义列表视图的片段 这些视图是使用 AsyncTask 从服务器的 xml 构建的 但是 当应用程序运行时 仅显示一个列表视图 另一页只是空白 public
  • new URL() - WHATWG URL API

    我正在摆弄节点 并试图获取 URL 类的实例 因为这些方便的属性 喜欢 const URL require url http createServer request response gt let uri new URL request