Esto se puede lograr mediante una combinación de la ruta y la URL del nodo :
- Requerir los paquetes:
const nodeUrl = require('url')
const nodePath = require('path')
- Empiece por crear un objeto URL con el que trabajar:
> const myUrl = new nodeUrl.URL('https://example.com')
- Utilice
pathname=
y path.join
para construir cualquier combinación posible:
> myUrl.pathname = nodePath.join('/search', 'for', '/something/')
'/search/for/something/'
(puedes ver lo liberal que path.join
es con los argumentos)
- En este punto, su URL refleja el resultado final deseado:
> myUrl.toString()
'https://example.com/search/for/something/'
¿Por qué este enfoque?
Esta técnica utiliza bibliotecas integradas. Cuantas menos dependencias de terceros, mejor, cuando se trata de CVE, mantenimiento, etc.
PD: ¡Nunca manipules las URL como cadenas!
Cuando reviso el código, soy inflexible sobre nunca manipular las URL como cadenas manualmente . Por un lado, mire lo complicada que es la especificación .
En segundo lugar, la ausencia / presencia de una barra inclinada ( /
) al final o prefijada no debería hacer que todo se rompa. Nunca deberías hacer:
const url = `${baseUrl}/${somePath}`
y especialmente no:
uri: host + '/' + SAT_SERVICE + '/' + CONSTELLATION + '/',
De los cuales acabo de encontrar en una base de código.
Sean Patrick Murphy
fuente
path.posix.join('/one/two/three', 'four') // '/one/two/three/four
,path.posix.join('/one/two/three/', 'four') // '/one/two/three/four
,path.posix.join('/one/two/three/', '/four') // '/one/two/three/four
path.posix.join('http://localhost:9887/one/two/three/', '/four')
, la combinación elimina una de las barras dobles enhttp://
'http://localhost:9887/one/two/three/'.replace(/^\/+|\/+$/, '') + '/' + '/four'.replace(/^\/+|\/+$/, '')
y podría hacerloString.prototype.trimSlashes = function() { return this.replace(/^\/+|\/+$/, ''); }
si no desea escribir la expresión regular una y otra vez. stackoverflow.com/a/22387870/2537258['http://localhost:9887/one/two/three/', '/four'].map((part) => part. replace(/^\/+|\/+$/, '')).join('/')