在Node中工作我需要将我的请求路径转换为相对路径,以便将其放入一些具有不同文件夹结构的模板中。
基本上如果我从路径“/ foo / bar”开始,我需要我的相对路径为“..” 如果它是“/ foo / bar / baz”我需要它是“../..”
我写了一对函数来执行此操作:
function splitPath(path) {
return path.split('/').map(dots).slice(2).join('/');
}
function dots() {
return '..';
}
不确定这是否是最佳方法,或者是否可以以某种方式在String.replace中使用正则表达式进行此操作?
修改
我应该指出这是因为我可以将所有内容呈现为静态HTML,压缩整个项目,并将其发送给无法访问Web服务器的人。看我的第一条评论。
答案 0 :(得分:16)
如果我理解你的问题是正确的,可以使用path.relative(from, to)
示例:强>
var path = require('path');
console.log(path.relative('/foo/bar/baz', '/foo'));
答案 1 :(得分:2)
Node.js具有用于此目的的本机方法:path.relative(from, to)。
答案 2 :(得分:0)
这可能需要一些调整,但它应该有效:
function getPathRelation(position, basePath, input) {
var basePathR = basePath.split("/");
var inputR = input.split("/");
var output = "";
for(c=0; c < inputR.length; c++) {
if(c < position) continue;
if(basePathR.length <= c) output = "../" + output;
if(inputR[c] == basePathR[c]) output += inputR[c] + "/";
}
return output;
}
var basePath ="/foo"
var position = 2;
var input = "/foo";
console.log(getPathRelation(position,basePath,input));
var input = "/foo/bar";
console.log(getPathRelation(position,basePath,input));
var input = "/foo/bar/baz";
console.log(getPathRelation(position,basePath,input));
结果:
(an empty string)
../
../../