首页 > 解决方案 > 为什么要跳过 URL 的第一个字符

问题描述

我正在从Eloquent JavaScript中学习一些 node.js,在那里我发现了这段代码,其目的是解码请求到服务器的 url 并相对于服务器的工作目录解析它:

const {parse} = require("url");
const {resolve, sep} = require("path");

const baseDirectory = process.cwd();

function urlPath(url) {
  let {pathname} = parse(url);
  let path = resolve(decodeURIComponent(pathname).slice(1));
  if (path != baseDirectory &&
      !path.startsWith(baseDirectory + sep)) {
    throw {status: 403, body: "Forbidden"};
  }
  return path;
}

这本书没有说任何关于.slice(1)in the line

let path = resolve(decodeURIComponent(pathname).slice(1));

为什么不做slice()呢?为什么在将解码后的 URL 的第一个字符与当前工作目录的路径进行比较之前跳过它?

标签: javascriptnode.jsserver

解决方案


路径名的第一个字符是/,目标是使用当前工作目录的相对路径,而不是从文件系统根目录开始的绝对路径。


推荐阅读