javascript - 为什么要跳过 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 的第一个字符与当前工作目录的路径进行比较之前跳过它?
解决方案
路径名的第一个字符是/
,目标是使用当前工作目录的相对路径,而不是从文件系统根目录开始的绝对路径。
推荐阅读
- kubernetes - 在 tekton 管道中使用 knctl/kubectl 将镜像部署到 Knative 服务
- snowflake-cloud-data-platform - 密码重置链接“已过期。请再次提交您的请求;
- azure - 逻辑应用程序-如何从队列中读取批处理消息
- javascript - POST 调用在邮递员中工作正常,但在 node.js 中出现错误
- javascript - A component is changing a controlled input of type of text to be uncontrolled
- sql - 仅从字段中提取有效的 TO_NUMBER 值
- android - 编码更改未反映在 Android Studio 的应用程序中
- android-studio - 解决使用 LeakCanary 检测到的 TTS 内存泄漏
- multithreading - 在后台队列上创建 NSAttributedString:“[NSCell init] 必须仅在主线程中使用”
- javascript - 为什么我调用 this.form.submit() 后我的选择没有改变?