今天主要学习了 Express 中
req(请求)和res(响应)的常用属性与方法,理解了路由概念,并独立解决了端口冲突问题。
一、今日核心代码(可复现)
注意用postman接收和发送
二、今日重点概念
| 概念 | 解释 |
|---|---|
| 路由 | 请求方法 + 路径 + 处理函数 |
req | 请求对象,包含浏览器带来的信息(参数、头部、路径) |
res | 响应对象,提供返回数据的方法 |
req.query | GET 请求的 ?key=value 参数 |
req.params | 动态路由 /user/:id 中的 id 值 |
req.method | 当前请求的 HTTP 方法(GET / POST / PUT / DELETE) |
res.send() | 返回 HTML / 文本 / JSON(自动识别) |
res.json() | 明确返回 JSON 数据 |
res.status() | 设置 HTTP 状态码(200 / 404 / 500) |
res.redirect() | 重定向到另一个路径 |
res.sendFile() | 返回静态 HTML 文件 |
三、踩过的坑 & 解决方法
坑 1:端口被占用,网页死活打不开
现象:nodemon 启动成功,但浏览器访问 localhost:3000 无响应,或显示“无法访问此网站”。
原因:上一个 Node 进程没关干净,Ctrl + C 没完全杀掉。
解决(Windows):
bash
# 1. 查看谁占了 3000 端口
netstat -ano | findstr :3000
# 输出:TCP 0.0.0.0:3000 ... LISTENING 12345
# 最后一列 12345 就是进程 PID
# 2. 强制杀掉进程
taskkill /F /PID 12345
第一次遇到花了半小时排查,以后 30 秒解决。这是全栈必会的硬技能。
坑 2:app / req / res 突然搞不清了
现象:明明之前知道,今天突然说不上来。
原因:从“死记硬背”过渡到“真正理解”的正常卡顿。
解决:花 2 分钟手写/口述下面的“一句话定义”:
req 的内容你看不到效果,所以要用 console.log 打印出来看
res 的内容直接发给浏览器,所以用 res.send 就能看到
javascript
const app = express(); // app = 整个应用(注册路由、启动服务器)
app.get('/', (req, res) => {
// req = 这次请求的信息(浏览器带了什么)
// res = 这次响应的工具(你要返回什么)
});
模糊期 = 理解正在形成。不是退步。
坑 3:不知道 req.query / req.params / req.method 有什么用
回答:后面做分页、筛选、用户详情、判断请求类型时都要用。
| 场景 | 用什么 |
|---|---|
分页:/list?page=2&size=10 | req.query |
用户详情:/user/123 | req.params |
| 判断登录时是 GET 还是 POST | req.method |
四、问题总结
- 路由是什么? → 路径 + 方法 → 处理函数
req和res的区别? → 一个负责“来”,一个负责“回”- 怎么拿到 URL 里的参数? →
req.query(查询参数) /req.params(路径参数) - 怎么返回 JSON? →
res.json({ name: '张三' })或res.send() - 怎么跳转页面? →
res.redirect('/login')