Day11:Express 第二天:req/res 理解 + 路由理解 + 端口冲突排查

3 阅读2分钟

今天主要学习了 Express 中 req(请求)和 res(响应)的常用属性与方法,理解了路由概念,并独立解决了端口冲突问题。


一、今日核心代码(可复现)

注意用postman接收和发送

二、今日重点概念

概念解释
路由请求方法 + 路径 + 处理函数
req请求对象,包含浏览器带来的信息(参数、头部、路径)
res响应对象,提供返回数据的方法
req.queryGET 请求的 ?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=10req.query
用户详情:/user/123req.params
判断登录时是 GET 还是 POSTreq.method

四、问题总结

  1. 路由是什么? → 路径 + 方法 → 处理函数
  2. req 和 res 的区别? → 一个负责“来”,一个负责“回”
  3. 怎么拿到 URL 里的参数? → req.query(查询参数) / req.params(路径参数)
  4. 怎么返回 JSON? → res.json({ name: '张三' }) 或 res.send()
  5. 怎么跳转页面? → res.redirect('/login')