2

这是一个小的 web-server 函数,它获取一个 url 并解析它,确保客户端不请求不在服务器根文件夹下的资源

function getUrl(url, resourceMap, rootFolder) {
    var path = require('path');
    if (typeof resourceMap[url] !== 'undefined') {
        return (path.join(rootFolder,resourceMap[url]));
    } 
    var absoluteURL = path.join(rootFolder,url);
    console.log("ROOT: "+rootFolder);
    console.log("NEW: "+absoluteURL);
    var regex = new RegExp('^' + rootFolder + '.*')
    if (absoluteURL.match(regex) === null) {
        console.log("FALSE");
        return (false);
    }
    return (absoluteURL);
}

如您所见,我确保absoluteURLrootFolder使用正则表达式开始'^' + rootFolder + '.*'

这在 Linux 上运行良好,但在 Windows 中它总是返回 false。

顺便说一句,输出是

ROOT: C:\Users\user\workspace
NEW: C:\Users\user\workspace\images\IMG_7102.JPG

所以我知道解析url是可以的。

艾米的想法为什么?谢谢

4

1 回答 1

4

在 Windows 上,\路径中的 s 成为正则表达式中的转义字符。

你需要正则表达式转义它:

rootFolder.replace(/[-[\/{}()*+?.\\^$|]/g, "\\$&")
于 2012-12-17T21:00:31.210 回答