我可以使用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);
打印:
没有! 在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的回答启发