我可以使用 require("path").join 安全地连接网址吗?

新手上路,请多包涵

使用 require("path").join 连接 URL 是否安全,例如:

 require("path").join("http://example.com", "ok");
//returns 'http://example.com/ok'

require("path").join("http://example.com/", "ok");
//returns 'http://example.com/ok'

如果不是,你会建议如何在不编写充满 if 的代码的情况下这样做?

原文由 Renato Gama 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 609
2 个回答

否。 path.join() 与 URL 一起使用时将返回不正确的值。

听起来你想要 new URL() 。来自 WHATWG URL 标准

 new URL('/one', 'http://example.com/').href    // 'http://example.com/one'
new URL('/two', 'http://example.com/one').href // 'http://example.com/two'

请注意, url.resolve 现在在 节点文档 中被标记为已弃用。

正如 Andreas 在评论中正确指出的那样, url.resolve (也 已弃用)只有在问题与示例一样简单时才会有所帮助。 url.parse 也适用于这个问题,因为它通过 URL 对象返回一致且可预测的格式字段,从而减少了对“充满 ifs 的代码”的需求。但是, new URL() 也是 url.parse 的替代品。

原文由 Matthew Bakaitis 发布,翻译遵循 CC BY-SA 4.0 许可协议

不,您不应该使用 path.join() 加入 URL 元素。

现在有一个包可以做到这一点。因此,与其重新发明轮子、编写所有自己的测试、查找错误、修复它们、编写更多测试、找到它不起作用的边缘情况等,不如使用这个包。

网址连接

https://github.com/jfromaniello/url-join

安装

npm install url-join

用法

var urljoin = require('url-join');

var fullUrl = urljoin('http://www.google.com', 'a', '/b/cd', '?foo=123');

console.log(fullUrl);

印刷:

http://www.google.com/a/b/cd?foo=123

原文由 stone 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题