Javascript 为什么要跳过URL的第一个字符
我正在学习node.js,从中我发现了这段代码,其目的是解码请求到服务器的url,并相对于服务器的工作目录解析它:Javascript 为什么要跳过URL的第一个字符,javascript,node.js,server,Javascript,Node.js,Server,我正在学习node.js,从中我发现了这段代码,其目的是解码请求到服务器的url,并相对于服务器的工作目录解析它: const{parse}=require(“url”); const{resolve,sep}=require(“路径”); const baseDirectory=process.cwd(); 函数url路径(url){ 让{pathname}=parse(url); 让path=resolve(decodeURIComponent(路径名).slice(1)); if(path
const{parse}=require(“url”);
const{resolve,sep}=require(“路径”);
const baseDirectory=process.cwd();
函数url路径(url){
让{pathname}=parse(url);
让path=resolve(decodeURIComponent(路径名).slice(1));
if(path!=baseDirectory&&
!path.startsWith(baseDirectory+sep)){
投掷{状态:403,身体:“禁止”};
}
返回路径;
}
这本书没有提到行中的.slice(1)
let path = resolve(decodeURIComponent(pathname).slice(1));
为什么不干脆
slice()
?在与当前工作目录的路径进行比较之前,为什么要跳过解码URL的第一个字符?路径名的第一个字符将是/
,目标是使用当前工作目录的相对路径,而不是从文件系统根开始的绝对路径。但是我创建了一个基本路径行为console.log(process.cwd())
的服务器,我得到了一个路径,路径以/home
开头,路径为/
。那么您需要解码URL中的/
,为什么?你自己没有连接到cwd的路径,是吗?也许我有点困惑(因为我对servers和node.js完全陌生),但这不是!path.startsWith(baseDirectory+sep)
试图确定path
是否以baseDirectory+sep
开头?如果baseDirectory
akaprocess.cwd
以/
开头,我们修剪路径中的前导/
,比较不是没有用吗?/
是从路径名
切片的,但是路径
是通过解析
传递的结果。哦,你说得对。我想这是关键点。我将检查文档中的resolve
。谢谢你所做的一切。