打印完整路径的javascript

时间:2018-06-22 11:54:44

标签: javascript node.js regex

这是我在执行查询时从数据库中获得的结果:

[
    {
        "name": "file1.txt",
        "id": 1,
        "file_path": "./public/files/file1.txt"
    }
    {
        "name": "file3.txt",
        "id": 3,
        "file_path": "./public/files/file3.txt"
    },
    {
        "name": "file4.txt",
        "id": 8,
        "file_path": "./public/files/file4.txt"
    },
    {
        "name": "file5.txt",
        "id": 7,
        "file_path": "./public/files/file5.txt"
    }
]

我要打印的是这种格式的文件路径 ./ public / files / file1.txt

这是我现在正在尝试的方法,但是似乎不起作用:

var paths = [];
if(result.length > 0) {
    var tmp_path = result[0].file_path

    var count = 0

    result.forEach(element =>  {
        count++
        tmp_path = element.file_path
        paths.push(decodeURI(tmp_path))
    })
    console.log(JSON.stringify(paths,null,4))
}

我得到的结果是:

[
"./public/files/file1.txt",
"./public/files/file3.txt",
"./public/files/file4.txt",
"./public/files/file5.txt",
]

在这种情况下,我不是应该使用encodeURI()函数吗?

我正在使用带有路由器和ejs npms的Node.js。因此,这是get函数的一部分,结果将在前端用ejs填充。所以我想做的是在结果上传递正确的格式,即 PATHS

4 个答案:

答案 0 :(得分:1)

您可以通过以下方式使用decodeURI()

var uri = "./public/files/file1.txt";
var enc = encodeURI(uri);
var dec = decodeURI(enc);

您可以如下所示以html形式显示此URL:

document.getElementById("demo").innerHTML = dec;

答案 1 :(得分:1)

您可以调整代码,以便将该文件路径作为HTML内容保存在元素div中,然后从该元素获取HTML以获取解码后的值并将其推入数组。

var result = [
    {
        "name": "1k",
        "id": 1,
        "file_path": "./public/files/file1.txt"
    },
    {
        "name": "3k",
        "id": 3,
        "file_path": "./public/files/file3.txt"
    },
    {
        "name": "4k",
        "id": 8,
        "file_path": "./public/files/file4.txt"
    },
    {
        "name": "5k",
        "id": 7,
        "file_path": "./public/files/file5.txt"
    }
];

var paths = [];
if(result.length > 0) {
    var tmp_path = result[0].file_path
    var count = 0
    
    result.forEach(element =>  {
        count++;
        tmp_path = element.file_path;
        var elem = document.createElement('div');
        elem.innerHTML = tmp_path;
        paths.push(elem.innerHTML);
    })
    console.log(JSON.stringify(paths,null,4))
}

答案 2 :(得分:1)

不确定是否适合您,但是您可以使用.map将数组重新映射为字符串数组,并进行一些调整:

因此,对于每个用file_path进行的';'拆分,然后取拆分'filei.text'的最后一个元素,并在其之前串联'./public/files/'

const res = data.map(e => {
  const path = e.file_path.split(';');
  const fileName = path[path.length-1];
  return './public/files/' + fileName;
});

const data = [
    {
        "name": "1k",
        "id": 1,
        "file_path": "./public/files/file1.txt"
    },
    {
        "name": "3k",
        "id": 3,
        "file_path": "./public/files/file3.txt"
    },
    {
        "name": "4k",
        "id": 8,
        "file_path": "./public/files/file4.txt"
    },
    {
        "name": "5k",
        "id": 7,
        "file_path": "./public/files/file5.txt"
    }
];

const res = data.map(e => {
  const path = e.file_path.split(';');
  const fileName = path[path.length-1];
  return './public/files/' + fileName;
});

console.log(res)

答案 3 :(得分:0)

只需用encodeURIfile_path进行编码,您将获得原始网址 例如:

var uri = "./public/files/file1.txt";
console.log(encodeURI(uri));

会返回:

"./public/files/file1.txt"