175 votes

Puis-je utiliser require("path").join pour concaténer des urls en toute sécurité ?

Peut-on l'utiliser en toute sécurité ? require("path").join pour concaténer des URL, par exemple :

require("path").join("http://example.com", "ok"); 
//returns 'http://example.com/ok'

require("path").join("http://example.com/", "ok"); 
//returns 'http://example.com/ok'

Si ce n'est pas le cas, quel moyen suggérez-vous pour faire cela sans écrire un code plein de "ifs" ?

6voto

Peter Points 31

Lorsque j'ai essayé PATH pour concaténer des parties d'url, j'ai rencontré des problèmes. PATH.join réduit '//' à '/' et invalide ainsi une url absolue (par exemple http://... -> http:/...). Pour moi, une solution rapide était :

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

ou avec la solution postée par Colonel Panic :

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

5voto

Colonel Panic Points 18390

Non ! Sur Windows path.join se joindront avec des antislashes. Les urls HTTP sont toujours des barres obliques.

Et si

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

5voto

Peter Dotchev Points 1769

On fait comme ça :

var _ = require('lodash');

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

5voto

M K Points 510

Si vous utilisez lodash vous pouvez utiliser ce simple oneliner :

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

inspiré par @Peter Dotchev's réponse

3voto

Mic Points 1318

Si vous utilisez Angular, vous pouvez utiliser Localisation :

import { Location } from '@angular/common';
// ...
Location.joinWithSlash('beginning', 'end');

Cependant, elle ne fonctionne qu'avec deux arguments, il faut donc enchaîner les appels ou écrire une fonction d'aide pour le faire si nécessaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X