Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

前端常见问题与基础概念

方法论:报错不可怕,复制错误信息问 AI。理解原理后,下次就不慌了。

HTTP 请求流程


📖 本节目标

学完本节,你将理解:

  • ✅ HTTP 请求是什么(前后端如何通信)
  • ✅ 浏览器开发者工具怎么用
  • ✅ 常见报错的原因和解决方法
  • ✅ 遇到问题如何有效求助

预计用时:20 分钟


1. HTTP:前后端如何通信

1.1 什么是 HTTP?

HTTP = 浏览器和服务器之间的“对话协议“

类比:想象你去银行办业务🏦

你(浏览器/前端)          银行柜台(服务器/后端)
    │                           │
    │  ──── 递纸条 ────→       │  "我要查余额"
    │                           │
    │  ←─── 回执单 ────        │  "您的余额是 1000 元"
    │                           │

HTTP 就是这张“纸条“的标准格式。

Vibe Coding 提示:你不需要精通 HTTP 的所有细节。只要知道“前端发请求,后端回数据“就够了。具体的代码?让 AI 写!

1.2 HTTP 请求方法

方法用途例子
GET获取数据获取文章列表
POST创建数据发布新文章
PUT更新数据(全量)更新整篇文章
PATCH更新数据(部分)只更新文章标题
DELETE删除数据删除文章

代码示例

// GET 请求 - 获取数据
const response = await fetch('/api/users')
const users = await response.json()  // 👈 把服务器返回的 JSON 格式数据转成 JS 对象

// POST 请求 - 创建数据
await fetch('/api/users', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ name: '张三', email: 'zhang@example.com' })
  //   ↑ 把 JS 对象转成 JSON 格式字符串发给服务器
})

// DELETE 请求 - 删除数据
await fetch('/api/users/123', { method: 'DELETE' })

什么是 JSON?

JSON = 前后端通用的“数据包裹“格式

就像快递要装箱一样,数据在网络上传输也要“打包“。JSON 就是这个标准包装盒。

你不需要记语法! 只要告诉 AI:“帮我发个 POST 请求把这些数据发给后端”,AI 会自动帮你加上 JSON.stringifyresponse.json() 这些。

1.3 HTTP 状态码

成功类(2xx)

状态码含义
200成功
201创建成功
204成功但无返回内容

重定向类(3xx)

状态码含义
301永久重定向
302临时重定向
304使用缓存

客户端错误(4xx)

状态码含义常见原因
400请求错误参数格式不对
401未认证没登录或 token 过期
403禁止访问没权限
404未找到地址写错了
422参数验证失败数据格式不符合要求

服务器错误(5xx)

状态码含义常见原因
500服务器内部错误后端代码报错
502网关错误服务器挂了
503服务不可用服务器过载

遇到 500 错误不要慌!

500 = 后端的锅,不是你的问题。

就像你去银行办业务,柜台系统崩溃了,这不怪你填错表格。

应对策略

  1. 如果是自己写的后端 → 检查后端代码和日志
  2. 如果是别人的 API → 等他们修好,或者联系他们
  3. 前端代码不用改! 500 错误意味着你的请求格式是对的,只是服务器处理出错了。

1.4 CORS 跨域问题

什么是跨域?

浏览器的安全策略:前端只能请求同源的接口。

同源 = 协议 + 域名 + 端口 都相同

http://localhost:3000  →  http://localhost:3000/api  ✅ 同源
http://localhost:3000  →  http://localhost:8000/api  ❌ 跨域(端口不同)
http://example.com     →  http://api.example.com     ❌ 跨域(域名不同)

Vibe Coding 提示:CORS 听起来很吓人,但别慌!

核心理解:CORS 是浏览器的“门卫“🛡️,防止你的网站被坏人利用去访问别的网站。

遇到 CORS 报错怎么办?

  1. 开发阶段:后端加一行代码允许你的前端访问(AI 会告诉你怎么加)
  2. Next.js 项目:可以用 API Routes 做“中转站“(前端 → Next.js → 后端)
  3. 生产阶段:前后端用同一个域名就不会跨域了

你不需要深究原理! 遇到就截图报错,告诉 AI:“我的 Next.js 前端访问后端 API 遇到 CORS 报错,怎么解决?”

解决方法示例

// Next.js 可以用 API Routes 代理
// 前端请求 /api/xxx,Next.js 转发到后端

// 或者后端配置允许跨域
// FastAPI 示例:
// app.add_middleware(CORSMiddleware, allow_origins=["*"])

2. 浏览器开发者工具

2.1 如何打开?

浏览器快捷键
ChromeF12Cmd+Option+I (Mac) / Ctrl+Shift+I (Win)
FirefoxF12
SafariCmd+Option+I(需先开启开发者菜单)

2.2 常用面板

Elements(元素)

  • 查看 HTML 结构
  • 实时修改样式
  • 调试布局问题

Console(控制台)

  • 查看 console.log 输出
  • 查看错误信息
  • 执行 JavaScript 代码

Network(网络)

  • 查看所有 HTTP 请求
  • 检查请求参数和响应
  • 调试接口问题

Application(应用)

  • 查看 localStorage / sessionStorage
  • 查看 Cookies
  • 清除缓存

2.3 调试技巧

查看接口请求

  1. 打开 Network 面板
  2. 刷新页面或触发操作
  3. 点击请求查看详情:
    • Headers:请求头、响应头
    • Payload:请求参数
    • Response:返回数据
    • Preview:格式化预览

查看错误信息

  1. 打开 Console 面板
  2. 红色的就是错误
  3. 点击错误可以看到详细堆栈

3. 常见报错与解决

3.1 npm 相关错误

错误 1:ENOENT: no such file or directory

npm ERR! ENOENT: no such file or directory

原因:找不到 package.json 解决:确保在项目根目录执行命令


错误 2:npm install 卡住或超时

npm ERR! network timeout

原因:网络问题,国外源太慢 解决:配置淘宝镜像

npm config set registry https://registry.npmmirror.com

错误 3:EACCES permission denied

npm ERR! EACCES: permission denied

原因:权限不足 解决

# 不要用 sudo npm install!
# 修复 npm 权限
sudo chown -R $(whoami) ~/.npm

错误 4:Module not found

Module not found: Can't resolve 'xxx'

原因:依赖没安装 解决

npm install xxx
# 或重新安装所有依赖
rm -rf node_modules && npm install

3.2 React / Next.js 错误

错误 1:Hydration failed

Error: Hydration failed because the initial UI does not match

原因:服务端和客户端渲染结果不一致 解决

  • 检查是否有只在客户端才有的值(如 windowDate.now()
  • 使用 useEffect 处理客户端逻辑
'use client'
import { useState, useEffect } from 'react'

function Component() {
  const [mounted, setMounted] = useState(false)

  useEffect(() => {
    setMounted(true)
  }, [])

  if (!mounted) return null

  return <div>{window.innerWidth}</div>
}

错误 2:useState is not defined / useEffect is not defined

Error: useState is not defined

原因:没有导入或没加 ‘use client’ 解决

'use client'  // 👈 别忘了这个
import { useState, useEffect } from 'react'

错误 3:Objects are not valid as a React child

Objects are not valid as a React child

原因:直接渲染了对象 解决

// ❌ 错误
<div>{user}</div>

// ✅ 正确
<div>{user.name}</div>
<div>{JSON.stringify(user)}</div>

错误 4:Cannot read property ‘xxx’ of undefined

TypeError: Cannot read property 'name' of undefined

原因:访问了不存在对象的属性 解决:使用可选链

// ❌ 错误
{user.name}

// ✅ 正确
{user?.name}

3.3 网络请求错误

错误 1:CORS error

Access to fetch has been blocked by CORS policy

原因:跨域请求被阻止 解决

  • 开发时:后端配置允许跨域
  • 生产时:使用同域 API 或配置代理

错误 2:Failed to fetch

TypeError: Failed to fetch

原因:网络问题或接口地址错误 解决

  • 检查接口地址是否正确
  • 检查后端服务是否启动
  • 打开 Network 面板查看详情

错误 3:JSON.parse error

SyntaxError: Unexpected token < in JSON at position 0

原因:响应不是 JSON 格式(可能返回了 HTML 错误页面) 解决

  • 检查接口地址是否正确
  • 在 Network 面板查看实际返回内容

3.4 构建/部署错误

错误 1:Build failed

Build failed because of webpack errors

原因:代码有语法或类型错误 解决

  • 仔细看错误信息,定位具体文件和行数
  • 运行 npm run lint 检查代码

错误 2:Type error

Type error: Property 'xxx' does not exist on type

原因:TypeScript 类型错误 解决

  • 定义正确的类型
  • 紧急情况可以用 any 类型临时解决
const data: any = response.json()

4. 有效求助的方法

4.1 复制完整错误信息

好的求助

我运行 npm run dev 报错了:

Error: Cannot find module 'react'
Require stack:
- /Users/xxx/my-app/node_modules/next/dist/server/require-hook.js

我已经尝试了 npm install 但还是不行

差的求助

我项目跑不起来了,怎么办?

4.2 提供关键信息

问 AI 时,最好包含:

  1. 完整的错误信息
  2. 执行的命令
  3. 相关代码片段
  4. 已经尝试过什么

4.3 自己先尝试

常见自救步骤:

# 1. 删除依赖重装
rm -rf node_modules
rm package-lock.json
npm install

# 2. 清除缓存
npm cache clean --force

# 3. 检查 Node 版本
node -v
# 确保版本 >= 18

# 4. 重启开发服务器
# 先 Ctrl+C 停止,再 npm run dev

5. 浏览器与前端的关系

5.1 浏览器如何加载网页

1. 用户输入网址
   ↓
2. 浏览器发送 HTTP 请求
   ↓
3. 服务器返回 HTML
   ↓
4. 浏览器解析 HTML,发现需要加载 CSS、JS
   ↓
5. 浏览器继续请求 CSS、JS 文件
   ↓
6. 浏览器渲染页面
   ↓
7. JavaScript 执行,页面变得可交互

5.2 浏览器存储

存储方式容量特点用途
Cookie4KB每次请求都会发送认证信息
localStorage5-10MB永久存储用户设置
sessionStorage5-10MB关闭页面就清除临时数据

代码示例

// localStorage
localStorage.setItem('theme', 'dark')
const theme = localStorage.getItem('theme')
localStorage.removeItem('theme')

// sessionStorage
sessionStorage.setItem('tempData', JSON.stringify(data))
const data = JSON.parse(sessionStorage.getItem('tempData'))

5.3 什么是 SPA?

SPA = Single Page Application(单页应用)

传统网站:每次点击链接都重新加载整个页面 SPA:只更新页面的一部分,不重新加载

Next.js 的 App Router 就是 SPA

  • 首次加载完整页面
  • 后续导航只更新变化的部分
  • 用户体验更流畅

📝 小结

概念说明
HTTP前后端通信协议
状态码2xx 成功,4xx 客户端错误,5xx 服务器错误
CORS浏览器跨域安全策略
开发者工具F12 打开,Network 看请求,Console 看错误

遇到问题的思路

  1. 看完整错误信息
  2. 复制错误信息问 AI
  3. 尝试常见自救步骤
  4. 提供充足信息求助

📚 下一步

恭喜你完成了前端常见问题的学习!

返回 前端开发基础 查看完整目录。