全书目录

第十二篇:Express 完全指南 —— 老城区主干道宇宙

第五章:请求与响应 —— 进城车辆和出城回执

1 分钟 169 字 第 243 / 962 个阅读单元

Express 的处理函数几乎都长这样:

js
(req, res) => { ... }

可以把它翻译成:

text
req = 来办事的请求车
res = 你发回去的回执车
#1. 请求对象 req 常用路段
js
app.post('/roads/:roadId/inspect', (req, res) => {
  console.log(req.method);      // POST
  console.log(req.path);        // /roads/12/inspect
  console.log(req.params);      // { roadId: '12' }
  console.log(req.query);       // ?urgent=true
  console.log(req.headers);     // 请求头
  console.log(req.body);        // 请求体
  res.send('ok');
});

最常见的四块:

  • req.params:路径参数
  • req.query:查询参数
  • req.body:请求体
  • req.headers:请求头
#2. 响应对象 res 常用回执方式
js
app.get('/ping', (req, res) => {
  res.send('pong');
});

app.get('/road-json', (req, res) => {
  res.json({ id: 1, name: '中山主路' });
});

app.get('/road-created', (req, res) => {
  res.status(201).json({ message: '道路已登记' });
});

app.get('/go-home', (req, res) => {
  res.redirect('/');
});
#3. sendjsonstatus 的心智模型
text
res.status(状态码)   = 这份回执是什么性质
res.send(内容)       = 发普通内容
res.json(对象)       = 发 JSON 内容
res.redirect(地址)   = 告诉对方改道
res.render(模板, 数据) = 把数据套进页面再发
#4. 一个完整例子
js
app.get('/roads/:roadId', (req, res) => {
  const { roadId } = req.params;
  const { detail } = req.query;

  res.status(200).json({
    roadId,
    detail: detail === 'full',
    message: `已查询 ${roadId} 号主干道`
  });
});