我可以使用require(“path”)。join来安全地连接url吗?

这是安全的使用require("path").join 。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' 

如果不是的话,你会怎样build议这样做,而不用编写完整的ifs代码。

这听起来像你想要的url.resolve 。 从Node文档 :

 url.resolve('/one/two/three', 'four') // '/one/two/four' url.resolve('http://example.com/', '/one') // 'http://example.com/one' url.resolve('http://example.com/one', '/two') // 'http://example.com/two' 

编辑:正如安德烈亚斯在评论中正确指出的那样,只有在问题如此简单时, url.resolve才会有帮助。 url.parse也适用于这个问题,因为它通过URL对象返回一致和可预测的格式化字段,从而减less了对“充满ifs的代码”的需求。

现在有一个包。 因此,而不是重新发明轮子,编写所有你自己的testing,发现错误,修复它们,写更多的testing,find一个不起作用的边缘案例等,你可以使用它。

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 '

没有! 在Windows path.join将join反斜杠。 HTTPurl总是正斜杠。

怎么样

 > ["posts", "2013"].join("/") 'posts/2013' 

当我试图连接url部分的PATH遇到问题。 PATH.join stripes'//'down to'/',这种方式使绝对url(例如http:// … – > http:/ …)失效。 对我来说一个快速解决scheme是:

 baseurl.replace(/\/$/,"") + '/' + path.replace(/^\//,"") ) 

或者由Panic上校发布的解决scheme:

 [pathA.replace(/^\/|\/$/g,""),pathB.replace(/^\/|\/$/g,"")].join("/") 

这是我使用的:

 function joinUrlElements() { var re1 = new RegExp('^\\/|\\/$','g'), elts = Array.prototype.slice.call(arguments); return elts.map(function(element){return element.replace(re1,""); }).join('/'); } 

例:

 url = joinUrlElements(config.mgmtServer, '/v1/o/', config.org, '/apps'); 

我们这样做:

 var _ = require('lodash'); function urlJoin(a, b) { return _.trimEnd(a, '/') + '/' + _.trimStart(b, '/'); } 

如果你使用lodash ,你可以使用这个简单的线索:

 // returns part1/part2/part3 ['part1/', '/part2', '/part3/'].map((s) => _.trim(s, '/')).join('/') 

@Peter Dotchev的回答启发