使用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的代码呢?
发布于 2013-04-30 22:07:04
不是的。当与URL一起使用时,path.join()将返回不正确的值。
听起来你想要new URL()。从WHATWG URL Standard
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的替代品。
发布于 2016-09-28 13:10:49
不,您不应该使用path.join()来连接URL元素。
现在有一个包可以做到这一点。因此,你可以使用这个包,而不是重新发明轮子,编写所有你自己的测试,查找bug,修复它们,编写更多的测试,找到它不能工作的边缘情况等等。
url-join
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‘
发布于 2019-08-02 20:00:50
WHATWG URL object构造函数有一个(input, base)版本,input可以使用/、./、../作为相对的。将其与path.posix.join结合使用,您可以执行任何操作:
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'https://stackoverflow.com/questions/16301503
复制相似问题