17

在 Node 中工作我需要将我的请求路径转换为相对路径,以便我可以将其放入一些具有不同文件夹结构的模板中。

基本上,如果我从路径“/foo/bar”开始,我需要我的相对路径是“..”如果它是“/foo/bar/baz”,我需要它是“../..”

我写了一对函数来做到这一点:

function splitPath(path) {
    return path.split('/').map(dots).slice(2).join('/');
}

function dots() {
    return '..';
}

不确定这是否是最好的方法,或者是否可以使用 String.replace 中的正则表达式来做到这一点?

编辑

我应该指出,这样我就可以将所有内容呈现为静态 HTML,压缩整个项目,然后将其发送给无法访问 Web 服务器的人。请参阅我的第一条评论。

4

3 回答 3

36

如果我理解你的问题是正确的,你可以使用path.relative(from, to)

文档

例子:

var path = require('path');
console.log(path.relative('/foo/bar/baz', '/foo'));
于 2012-09-15T15:53:51.647 回答
3

Node.js 有用于此目的的本地方法:path.relative(from, to)

于 2012-09-15T15:53:22.187 回答
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)    
../    
../../
于 2012-09-15T15:51:30.667 回答