Czy mogę użyć require ("ścieżka").Dołącz, aby bezpiecznie łączyć adresy URL?
Czy jest to bezpieczne w użyciu require("path").join
do łączenia adresów URL, na przykład:
require("path").join("http://example.com", "ok");
//returns 'http://example.com/ok'
require("path").join("http://example.com/", "ok");
//returns 'http://example.com/ok'
Jeśli nie, jaki sposób sugerujesz, aby zrobić to bez pisania kodu pełnego if.
8 answers
Nie. path.join()
zwróci nieprawidłowe wartości w przypadku użycia z adresami URL.
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'
Edit:
Jak słusznie zauważył Andreas w komentarzu, url.resolve
pomoże tylko wtedy, gdy problem jest tak prosty, jak w przykładzie. url.parse
odnosi się również do tego pytania, ponieważ zwraca konsekwentnie i przewidywalnie sformatowane pola za pośrednictwem obiektu URL
, który zmniejsza potrzebę "kodu pełnego ifs".
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-06 23:51:47
Nie, Nie należy używać path.join()
do łączenia elementów URL.
URL-join
Https://github.com/jfromaniello/url-join
Install
npm install url-join
Użycie
var urljoin = require('url-join');
var fullUrl = urljoin('http://www.google.com', 'a', '/b/cd', '?foo=123');
console.log(fullUrl);
Druki:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-06 23:52:36
Nie! W systemie Windows path.join
połączy się z odwrotnymi ukośnikami. Adresy URL HTTP są zawsze ukośnikami do przodu.
A może
> ["posts", "2013"].join("/")
'posts/2013'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-30 13:50:55
Kiedy próbowałem ścieżki do łączenia części url napotkałem problemy.
PATH.join
paski '/ / 'w dół do' / ' i w ten sposób unieważnia bezwzględny adres url (np. http://... - >http:/...).
Dla mnie szybkie rozwiązanie było:
baseurl.replace(/\/$/,"") + '/' + path.replace(/^\//,"") )
Lub z rozwiązaniem zamieszczonym przez pułkownika Panic:
[pathA.replace(/^\/|\/$/g,""),pathB.replace(/^\/|\/$/g,"")].join("/")
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-27 12:03:19
Tego używam:
function joinUrlElements() {
var re1 = new RegExp('^\\/|\\/$','g'),
elts = Array.prototype.slice.call(arguments);
return elts.map(function(element){return element.replace(re1,""); }).join('/');
}
Przykład:
url = joinUrlElements(config.mgmtServer, '/v1/o/', config.org, '/apps');
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-18 20:06:05
Robimy to tak:
var _ = require('lodash');
function urlJoin(a, b) {
return _.trimEnd(a, '/') + '/' + _.trimStart(b, '/');
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-08 14:49:31
Jeśli używasz lodash , możesz użyć tego prostego onelinera:
// returns part1/part2/part3
['part1/', '/part2', '/part3/'].map((s) => _.trim(s, '/')).join('/')
Inspired by @ Peter Dotchev ' S answer
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-08 07:17:25
Axios posiada funkcję pomocniczą, która może łączyć adresy URL.
function combineURLs(baseURL, relativeURL) {
return relativeURL
? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '')
: baseURL;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-22 13:59:43