这是一个Web服务器的小功能,它获取一个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);
}
如您所见,我使用正则表达式
absoluteURL
来确保rootFolder
以'^' + rootFolder + '.*'
开头这在Linux上运行良好,但在Windows中始终返回false。
顺便说一句输出是
ROOT: C:\Users\user\workspace
NEW: C:\Users\user\workspace\images\IMG_7102.JPG
因此,我知道该网址的解析是可以的。
艾米的想法为什么?
谢谢
最佳答案
在Windows上,路径中的\
成为正则表达式中的转义字符。
您需要regex-escape它:
rootFolder.replace(/[-[\/{}()*+?.\\^$|]/g, "\\$&")
关于regex - 正则表达式可在Linux中工作,但不能在Windows中工作-node.js,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13922086/