首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我是否可以使用require("path").join来安全地连接urls?

我是否可以使用require("path").join来安全地连接urls?
EN

Stack Overflow用户
提问于 2013-04-30 21:45:36
回答 12查看 76.8K关注 0票数 156

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

代码语言:javascript
复制
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的代码呢?

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2013-04-30 22:07:04

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

听起来你想要new URL()。从WHATWG URL Standard

代码语言:javascript
复制
new URL('/one', 'http://example.com/').href    // 'http://example.com/one'
new URL('/two', 'http://example.com/one').href // 'http://example.com/two'

请注意,在Node docs中,url.resolve现在被标记为已弃用。

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

票数 195
EN

Stack Overflow用户

发布于 2016-09-28 13:10:49

不,您不应该使用path.join()来连接URL元素。

现在有一个包可以做到这一点。因此,你可以使用这个包,而不是重新发明轮子,编写所有你自己的测试,查找bug,修复它们,编写更多的测试,找到它不能工作的边缘情况等等。

url-join

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

安装

npm install url-join

用法

代码语言:javascript
复制
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

票数 55
EN

Stack Overflow用户

发布于 2019-08-02 20:00:50

WHATWG URL object构造函数有一个(input, base)版本,input可以使用/./../作为相对的。将其与path.posix.join结合使用,您可以执行任何操作:

代码语言:javascript
复制
const {posix} = require ("path");
const withSlash = new URL("https://example.com:8443/something/");
new URL(posix.join("a", "b", "c"), withSlash).toString(); // 'https://example.com:8443/something/a/b/c'
new URL(posix.join("./a", "b", "c"), withSlash).toString(); // 'https://example.com:8443/something/a/b/c'
new URL(posix.join("/a", "b", "c"), withSlash).toString(); // 'https://example.com:8443/a/b/c'
new URL(posix.join("../a", "b", "c"), withSlash).toString(); // 'https://example.com:8443/a/b/c'
const noSlash = new URL("https://example.com:8443/something");
new URL(posix.join("./a", "b", "c"), noSlash).toString(); // 'https://example.com:8443/a/b/c'
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16301503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档