2

これは、URL を取得して解析し、クライアントがサーバーのルート フォルダーの下にないリソースを要求していないことを確認する小さな Web サーバー関数です。

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);
}

ご覧のとおり、正規表現を使用してabsoluteURL開始することを確認しますrootFolder'^' + 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 に答える