mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6
1369 字
4 分钟
Web 开发中的路径基础知识
2026-03-21

什么是路径#

路径就是”地址”#

路径(Path)就是描述”资源在哪里”的方式。

就像现实生活中的地址:

  • 北京市朝阳区某某路 88 号 = 绝对地址
  • 往前走第二个路口左转 = 相对地址

在计算机和 Web 开发中,路径用来描述文件在哪里或者资源在哪里


为什么路径容易搞混#

路径的四种场景#

在 Web 开发中,我们经常遇到四種不同的路径:

场景说明示例
文件系统路径硬盘上的文件位置/home/user/project/api/like.ts
URL 路径网络上的资源地址https://example.com/api/like
模块路径JavaScript 引入模块import { xxx } from '@/utils/xxx'
// 模块路径示例
import { useState } from 'react'; // 从 node_modules 导入
import MyComponent from '@/components/MyComponent'; // 使用别名导入(@ 指向前 src 目录)
import api from '../utils/api'; // 相对导入

| 路由路径 | 框架定义的 URL 映射 | app.get('/api/users', ...) |

它们看起来很像,但完全不是一回事!


文件系统路径#

什么是文件系统#

文件系统是操作系统管理硬盘的方式,帮你找到存储在磁盘上的文件。

Windows vs Mac/Linux 的路径差异#

# Windows:从盘符开始
D:\project\blog\api\like.ts
C:\Users\admin\Desktop\notes.md
# Mac/Linux:从根目录开始(/)
/home/user/project/api/like.ts
/etc/nginx/nginx.conf
/usr/local/bin/node

关键区别

  • Windows 用反斜杠 \\
  • Mac/Linux 用正斜杠 //
  • Windows 有盘符(C:, D:),Unix 没有

开发提示:在 Node.js 和 JavaScript 中,即使在 Windows 系统上,也通常使用正斜杠 / 作为路径分隔符,因为 Node.js 会自动处理。例如,'C:/Users/admin/project' 在 Windows 上同样有效。

路径的基本概念#

/home/user/project/src/components/Button.ts
^^^^^^ ^^^ ^^^^ ^^^^^^ ^^^^^^^^^^ ^^^^^^^
根目录 用户 项目 源码 组件 文件

URL 路径#

URL 的结构#

https://example.com:443/api/users?id=1#section
^^^^^^^^ ^^^^://^^^ ^^^^/^^ ^^^^^^ ^^=^ ^^^^^^
| | | | | | |
协议 域名 端口 路径 查询参数 锚点

URL 路径 vs 文件系统路径#

相似之处:都使用 / 分隔层级

本质区别

属性文件系统路径URL 路径
分隔符Windows \ 或 Unix /始终 /
根目录硬盘根或用户目录域名根
访问方式通过操作系统读取通过 HTTP 请求
存在位置磁盘上(物理文件)服务器上的映射(虚拟地址)

URL 路径的层级#

https://example.com/blog/posts/dns-guide
^^^^^^^^^^^^^^
路径层级

绝对路径#

什么是绝对路径#

绝对路径是从”根”开始的完整地址,在任何地方都能找到

文件系统的绝对路径#

# Linux/Mac:从根目录 / 开始
/etc/nginx/nginx.conf
/home/user/project/src/index.ts
/var/log/nginx/access.log
# Windows:从盘符开始
D:\project\blog\api\like.ts
C:\Users\admin\Desktop\notes.md

URL 的绝对路径#

<!-- 完整的绝对 URL(带协议) -->
<a href="https://example.com/api/users">链接</a>
<!-- 根相对路径(从域名根开始,不带协议) -->
<a href="/api/users">链接</a>
<a href="/images/logo.png">图片</a>

/ 在 URL 中永远代表域名根目录,不是当前页面所在位置。


相对路径#

什么是相对路径#

相对路径是相对于”我现在在哪里”的位置。

文件系统的相对路径#

假设当前目录是 /home/user/project/

# 当前目录
.
# 当前目录下的 src
src/
# 当前目录下的 src/index.ts
src/index.ts
# 上一级目录
..
# 上上级目录
../..
# 上一级的 config 文件夹
../config/
# 上一级的 config/settings.json
../config/settings.json

URL 的相对路径#

假设当前页面是 https://example.com/blog/posts/

相对路径解析后的 URL
./https://example.com/blog/posts/
style.csshttps://example.com/blog/posts/style.css
../https://example.com/blog/
../images/photo.pnghttps://example.com/blog/images/photo.png
/static/logo.pnghttps://example.com/static/logo.png

... 的区别#

. 当前目录
.. 上一级(父)目录

相对路径的风险#

相对路径在不同场景下可能出问题:

<!-- 在 https://example.com/blog/ 中 -->
<a href="posts/dns-guide">文章</a>
<!-- 链接到 https://example.com/blog/posts/dns-guide ✓ -->
<!-- 在 https://example.com/ 中 -->
<a href="posts/dns-guide">文章</a>
<!-- 链接到 https://example.com/posts/dns-guide ✓ -->

同一个相对路径,在不同页面可能指向不同位置。

经验之谈:在生产环境中,尽量使用绝对路径(以 / 开头),避免相对路径的歧义。


框架的路由定义#

我的真实经历#

最开始用的是 Node.js + Express 框架:

server.js
app.get('/api/like', (req, res) => res.json({ count: 42 }));
app.get('/', (req, res) => res.send('首页'));

我以为访问根路径 / 就能调用 API:

错误想法:API 放在 api/ 文件夹里,访问 https://xxx.com/ 就应该能调用。

实际情况

路由定义访问地址
app.get('/api/like', ...)https://xxx.com/api/like
app.get('/', ...)https://xxx.com/

根路径 / 对应的是首页,不是 API。

核心要点#

在 Express(以及 Koa、Nest 等 Node.js 框架)中:

  1. 每个 URL 必须在代码里明确定义
  2. 文件夹名 ≠ 路由路径
  3. 你写什么路径,就只能访问什么路径
// ❌ 错误:以为会自动映射
// API 在 api/like.js,就以为能访问 /api/like
// ✅ 正确:必须明确定义路由
app.get('/api/like', (req, res) => { ... });
app.post('/api/like', (req, res) => { ... });

Express vs 约定式路由对比#

特性Express(代码定义路由)Next.js(约定式路由)
路由定义方式在代码中用 app.get('/path', ...) 明确定义由文件系统结构自动映射
文件夹与路由关系无关。文件夹仅用于组织代码强相关pages/api/users.ts/api/users
灵活性高,可自定义任意路径低,路径由文件位置决定
开发心智模型”我定义什么,用户就能访问什么""文件放哪里,用户就访问哪里”

核心区别:Express 中,路由是显式声明的;Next.js 中,路由是隐式约定的。

Express 路由的完整示例#

const express = require('express');
const app = express();
// 首页
app.get('/', (req, res) => {
res.send('这是首页');
});
// 获取点赞数
app.get('/api/like', (req, res) => {
res.json({ count: 42 });
});
// 增加点赞
app.post('/api/like', (req, res) => {
// 增加点赞逻辑
res.json({ count: 43 });
});
// 获取用户列表
app.get('/api/users', (req, res) => {
res.json([{ name: 'Alice' }, { name: 'Bob' }]);
});
// 获取单个用户
app.get('/api/users/:id', (req, res) => {
const { id } = req.params;
res.json({ id, name: 'User ' + id });
});

对应的 URL:

路由URL
app.get('/', ...)/
app.get('/api/like', ...)/api/like
app.post('/api/like', ...)/api/like (POST)
app.get('/api/users/:id', ...)/api/users/123

常见问题#

Q:文件夹叫 api,URL 就是 /api 吗?#

不一定! 取决于框架:

框架路由定义方式
Express/Koa代码里写 app.get('/api/xxx', ...)
Next.js文件在 pages/api/xxx.ts → 自动映射到 /api/xxx
Nuxt文件在 server/api/xxx.ts → 自动映射到 /api/xxx

Q:相对路径和绝对路径哪个更好?#

在生产环境中,尽量用绝对路径

<!-- 绝对路径(推荐) -->
<link href="/css/style.css">
<a href="/api/users">用户</a>
<img src="/images/logo.png">
<!-- 相对路径(有风险) -->
<link href="../css/style.css">
<a href="users">用户</a>

Q:路径最后要不要加 /#

✅ /about/ → 明确是 about 目录
✅ /about → 服务器通常会自动重定向到 /about/
⚠️ /about → 取决于服务器配置

总结#

要点回顾#

  1. 文件系统路径URL 路径是两回事
  2. 绝对路径从根开始,相对路径从当前位置算
  3. URL 中的 / 代表域名根目录
  4. Express 路由:代码定义路由,写什么路径就是什么路径
  5. 文件夹名 ≠ 路由路径,必须在代码里明确定义(除约定式路由框架外)

一句话记住#

Express 中,路由必须明确定义。你写 /api/like 才能访问 /api/like,不是文件夹叫什么路径就是什么。

快速对照表#

类型示例特点
文件系统绝对路径/home/user/file.ts从根目录算
URL 绝对路径https://example.com/api完整 URL
URL 根相对路径/api/like从域名根算
文件系统相对路径./../file.ts从当前目录算
URL 相对路径./users从当前页面算
场景路由/路径访问地址
Express 首页app.get('/', ...)/
Express APIapp.get('/api/like', ...)/api/like
Express 用户app.get('/api/users', ...)/api/users

EOF

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Web 开发中的路径基础知识
https://bayunmoyu.com/posts/web-path-basics/
作者
八云墨玉
发布于
2026-03-21
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

封面
Sample Song
Sample Artist
封面
Sample Song
Sample Artist
0:00 / 0:00