true query parse node new from domain node.js url string-concatenation

node.js - query - ¿Puedo usar require("ruta"). Join para concatenar urls de forma segura?



url query node js (8)

¿Es seguro utilizar? require("path").join para concatenar URL, por ejemplo:

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 no, ¿de qué manera sugerirías hacer esto sin escribir un código lleno de ifs?


¡No! En Windows, path.join se unirá con barras diagonales inversas. Las URL HTTP son siempre barras diagonales.

Qué tal si

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


Cuando probé PATH para concatenar partes de url me encontré con problemas. PATH.join stripes ''//'' hasta ''/'' y de esta forma invalida una url absoluta (ej. Http: // ... -> http: / ...). Para mí, una solución rápida fue:

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

o con la solución publicada por el coronel Panic:

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


Esto es lo que uso:

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

ejemplo:

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


Lo hacemos así:

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


No, no debe usar path.join() para unir elementos de URL.

Hay un paquete para hacer eso ahora. Entonces, en lugar de reinventar la rueda, escribir todas sus propias pruebas, encontrar errores, arreglarlos, escribir más pruebas, encontrar un caso límite donde no funcione, etc., podría usar este paquete.

url-join

https://github.com/jfromaniello/url-join

Instalar

npm install url-join

Uso

var urljoin = require(''url-join''); var fullUrl = urljoin(''http://www.google.com'', ''a'', ''/b/cd'', ''?foo=123''); console.log(fullUrl);

Huellas dactilares:

'' http://www.google.com/a/b/cd?foo=123 ''


No. path.join() devolverá valores incorrectos cuando se use con URL.

Parece que quieres url.resolve . De los documentos del nodo :

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''

Editar: Como Andreas señala correctamente en un comentario, url.resolve solo ayudaría si el problema es tan simple como el ejemplo. url.parse también se aplica a esta pregunta porque devuelve campos formateados de manera consistente y predecible a través del objeto URL que reduce la necesidad de un "código lleno de ifs".


Si está utilizando lodash , puede usar este simple oneliner:

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

inspirado en la respuesta de @Peter Dotchev