
本文深入探讨了j*ascript `url` 构造函数在使用相对路径与基础url组合时可能遇到的常见陷阱,即基础url的路径部分被意外覆盖的问题。通过分析两种主要原因——相对路径以斜杠开头和基础url缺少末尾斜杠,并提供了明确的解决方案和示例代码,确保您能正确地构建出预期的完整url。
在现代Web开发中,构建和管理URL是常见的任务。J*aScript的 URL 构造函数提供了一种强大且标准化的方式来解析、构建和操作URL。然而,当尝试将一个相对路径与一个包含路径的基础URL(Base URL)组合时,开发者可能会遇到一个常见的困惑:基础URL的路径部分被意外地移除或覆盖。本文将详细解析这一现象,并提供正确的处理方法。
URL 构造函数接受两个参数:new URL(relativeURL, baseURL)。它的核心作用是根据 baseURL 解析 relativeURL。这里的关键在于 relativeURL 的类型和 baseURL 的结构。
考虑以下场景,我们希望将 /items 这个相对路径附加到 https://example.com/v1 这个基础URL之后,期望得到 https://example.com/v1/items。
const getUrl = () => {
const ids = ["1","2","3"];
// 初始尝试:相对路径以斜杠开头,基础URL无末尾斜杠
const url = new URL("/items", "https://example.com/v1");
url.searchParams.set("id", ids?.toString() ?? "");
return url.toString();
};
console.log(getUrl());
// 实际输出:https://example.com/items?id=1%2C2%2C3
// 期望输出:https://example.com/v1/items?id=1%2C2%2C3从上述代码的输出可以看出,v1 这个路径段被移除了。这是为什么呢?
这种行为通常是由两个因素共同或单独作用造成的:
当 relativeURL 以 / 开头时,它被解释为相对于 baseURL 的源 (origin) 的绝对路径,而不是相对于 baseURL 的完整路径。一个URL的源包括协议、主机名和端口。这意味着 new URL("/items", "https://example.com/v1") 中的 /items 会被视为 https://example.com 的根目录下的 items,从而忽略了 v1。
例如:
MarsC
ode
字节跳动旗下的免费AI编程工具
339
查看详情
如果 baseURL 的路径部分没有以 / 结尾,URL 构造函数会将其最后一个路径段视为一个文件,而不是一个目录。在这种情况下,当附加一个不以 / 开头的相对路径时,这个“文件”会被新的相对路径替换掉。
例如:
在我们的原始例子 new URL("/items", "https://example.com/v1") 中,虽然 items 前面有 / 导致它被解释为根路径,但如果 items 前面没有 /,且 v1 没有末尾斜杠,也会导致 v1 被 items 替换。
为了确保基础URL的路径部分能够正确地保留并附加新的相对路径,我们需要同时满足以下两个条件:
结合这两个修改,我们可以得到正确的URL构建方式:
const getUrl = () => {
const ids = ["1","2","3"];
// 修正后的代码:相对路径无斜杠,基础URL有末尾斜杠
const url = new URL("items", "https://example.com/v1/"); // 注意这里的修改
url.searchParams.set("id", ids?.toString() ?? "");
return url.toString();
};
console.log(getUrl());
// 输出:https://example.com/v1/items?id=1%2C2%2C3通过上述修改,URL 构造函数能够正确地将 items 路径附加到 https://example.com/v1/ 之后,从而生成我们期望的完整URL。
理解 URL 构造函数在处理相对路径和基础URL时的细微差别至关重要。
因此,在需要将一个相对路径附加到包含路径的基础URL之后时,请务必确保:
遵循这些规则将帮助您避免常见的URL构建错误,确保应用程序中的URL逻辑健壮且符合预期。
以上就是J*aScript URL 构造函数:正确处理相对路径与基础路径的技巧的详细内容,更多请关注其它相关文章!
# 两种
# 怎样做兼职网站推广员
# 优化网站需要做什么的
# seo+img标签
# 什么是网页的seo
# seo怎么做站长
# 大庆网站推广方案
# 网站优化头像怎么设置好
# 抚顺网站建设模板售后
# seo 服务器日志
# 网站霸屏推广哪家合适
# 可选
# 而不
# javascript
# 正确处理
# 移除
# 正确地
# 被视为
# 不以
# 是一个
# 相对于
# 为什么
# ai
# 端口
# java
相关文章:
win11 arm版怎么安装 M1/M2 Mac虚拟机安装ARM win11的方法
msn官网入口地址手机版 msn官方网站手机最新链接
Yandex免登录网页版地址 Yandex搜索引擎官方访问入口
零跑汽车11月交付量达70327台 实现连续9个月正增长
PHP表单提交消息延迟显示:Post-Redirect-Get模式深度解析与实践
支付宝解绑银行卡步骤_支付宝如何解除绑定银行卡
c++中的const_cast和reinterpret_cast怎么用_c++四种类型转换
顺丰快件物流信息 官方网站查询入口
QQ网页版官方账号入口 QQ网页版网页版登录指南
Windows10怎么开启夜间模式 Windows10系统设置调整色温与亮度缓解夜间用眼疲劳【教程】
台积电1.4nm工艺A14瞄准2028:10年来性能提升80%
Go语言中的*string:深入理解字符串指针
单射、满射与双射的关系 一文理清所有逻辑
在J*a中如何在J*a中使用异常机制记录错误日志_异常日志实践经验
Win11怎么开启高性能模式_Windows 11电源计划优化设置
天猫双十一预售商品怎么退款_天猫双十一预售退款操作指南
PHP教程:高效从URL路径中提取倒数第二个片段
Tabulator表格中精确实现日期时间排序的指南
谷歌学术网站直达地址 谷歌学术搜索网页版一键进入
QQ邮箱在线使用入口 QQ邮箱个人账号网页版登录
Go语言:非阻塞式判断标准输入(os.Stdin)是否有数据
Go语言HTML解析:利用Goquery精准获取指定元素内容
C++如何进行游戏物理模拟_使用Box2D库为C++游戏添加2D物理效果
聚水潭ERP登录页面入口 聚水潭ERP官网登录界面
J*aScript设计模式实践_j*ascript代码优化
向日葵客户端怎么进行远程CentOS控制_向日葵客户端远程CentOS控制操作教程
火狐浏览器占用内存高卡顿怎么办 火狐浏览器性能优化设置技巧
J*a ArrayList索引越界异常:动态构建列数据的高效策略
Win10文件资源管理器“此电脑”分组怎么关 Win10恢复经典视图【技巧】
必由学登录入口 必由学官方网站在线访问链接
铃兰之剑为这和平的世界希里技能组及加点推荐
win11怎么查看应用耗电情况 Win11电池设置查看应用能耗排行榜【优化】
MAC如何安全彻底地删除文件_MAC使用终端命令确保文件无法被恢复
J*a TimerTask文件监控:HashMap状态管理与常见陷阱规避指南
uc手机浏览器网页版入口 uc浏览器手机版便捷登录首页
解决 Express.js 中 PUT 请求密码修改失败的路由配置指南
TikTok评论显示延迟如何处理 TikTok评论刷新优化方法
俄罗斯Yandex搜索引擎入口_Yandex官网免登录一键访问
文心一言怎样用批量生成做多版文案_文心一言用批量生成做多版文案【批量创作】
lar*el怎么安全地存储和获取配置文件中的敏感信息_lar*el敏感信息安全存储方法
Win11怎么查看显卡显存 Win11显示适配器属性及专用视频内存查询
如何配置Composer的PSR-4自动加载_Composer自动加载命名空间映射实践教程
Archive of Our Own官网直达 AO3最新可用地址一览
Go语言中Map存储的结构体如何调用指针方法:深入解析与实践
Win11怎么设置鼠标指针速度_Win11提高鼠标指针精确度选项
三星ZFold5多任务卡顿_Samsung ZFold5流畅度提升
必由学官方登录入口 必由学教师学生账号快速访问
在Typer应用中优雅地处理和重组任意命令行参数
《明末:渊虚之羽》设计师谈设计角色:那会刚毕业 充满激情
MAC的“快捷指令”怎么同步到iPhone_MAC利用iCloud同步所有设备的自动化指令
*请认真填写需求信息,我们会在24小时内与您取得联系。