url.resolve
は、私はそれが一見だろうと思ったものではありません... DIR1は、第二の例ではドロップされるか
url.resolve('/one/two/three', 'four') // '/one/two/four'
url.resolve('http://domain.com/dir1', 'dir2'); // 'http://domain.com/dir2 (dir1 is gone!)
に注意してくださいここで私が書いた簡単な参加方法です:
var _s = require('underscore.string');
/**
* Joins part1 and part2 with optional separator (defaults to '/'),
* and adds the optional prefix to part1 if specified
*
* @param {string} part1
* @param {string} part2
* @param {string} [separator] - defaults to '/'
* @param {string} [prefix] - defaults to empty... pass in "http://" for urls if part1 might not already have it.
* @returns {string}
*/
exports.joinWith = function(part1, part2, separator, prefix) {
var join = "";
var separatorsFound = 0;
if(!separator) { separator = "/"; }
if(!prefix) { prefix = ""; }
if(_s.endsWith(part1, separator)) { separatorsFound += 1; }
if(_s.startsWith(part2, separator)) { separatorsFound += 1; }
// See if we need to add a join separator or remove one (if both have it already)
if(separatorsFound === 0) { join = separator; }
else if(separatorsFound === 2) { part1 = part1.substr(0, part1.length - separator.length); }
// Check if prefix is already set
if(_s.startsWith(part1, prefix)) { prefix = ""; }
return prefix + part1 + join + part2;
}
は、
サンプル:
// TEST
console.log(exports.joinWith('../something', 'else'));
console.log(exports.joinWith('../something/', 'else'));
console.log(exports.joinWith('something', 'else', "-"));
console.log(exports.joinWith('something', 'up', "-is-"));
console.log(exports.joinWith('something-is-', 'up', "-is-"));
console.log(exports.joinWith('../something/', '/else'));
console.log(exports.joinWith('../something/', '/else', "/"));
console.log(exports.joinWith('somedomain.com', '/somepath', "/"));
console.log(exports.joinWith('somedomain.com', '/somepath', "/", "http://"));
console.log(exports.joinWith('', '/somepath', "/"));
OUTPUT:
../something/else
../something/else
something-else
something-is-up
something-is-up
../something/else
../something/else
somedomain.com/somepath
http://somedomain.com/somepath
/somepath
ああ、ありがとう。私は 'url'モジュールについて知っていましたが、' url.resolve'が一緒にURLを結合することに気づいていませんでした。私は 'パス'が次善策かもしれないと思った。 – jdotjdot
url.resolveは、path.joinの代わりにURLの代わりにドロップされるわけではありません。むしろ "基本URLとhref URLをとり、アンカータグの場合と同様にブラウザを解決してください。"具体的には、 "http://example.com/one"と "two"を指定すると、 "http://example.com/two"と表示され、 "http://example.com/one/"ではなく二" –