Express 响应方法详解与最佳实践

69 阅读2分钟

在 Web 服务开发中,服务器需要根据不同的业务需求,将各种类型的数据返回给客户端。Express 框架为开发者提供了丰富且易用的响应方法,让你可以灵活地设置响应内容、响应头、状态码等。下面从底层原理到常用方法,带你全面了解 Express 响应的核心用法。

1. 最底层的响应方式:res.end()

Express 的响应对象 res 实际上是 Node.js 原生 http.ServerResponse 的增强版。最底层的响应方法是 res.end(),它直接结束响应流并返回数据。默认情况下,响应头 Content-Typetext/plain,表示返回的是纯文本内容。

app.use((req, res) => {
  // res.end() 可用于返回任意字符串或 Buffer
  // 不会自动设置 Content-Type,需要开发者自行处理
  res.end('Hello World')
})

这种方式简单直接,适合返回纯文本内容,但如果需要返回 JSON 或设置其他响应头,建议使用更高级的方法。

2. 返回 JSON 数据:res.json()

前后端分离开发中,后端接口最常见的响应格式就是 JSON。Express 提供了 res.json() 方法,专门用于返回 JSON 格式的数据。它有如下优点:

  • 参数可以是对象、数组等任意可序列化的数据
  • 会自动将对象序列化为 JSON 字符串
  • 自动设置响应头 Content-Type: application/json

示例:

app.use((req, res) => {
  res.json({
    name: 'Klaus',
    age: 23
  })
})

这样前端拿到的数据就是标准的 JSON 格式,极大方便了数据交互。

3. 智能响应:res.send()

res.send() 是 Express 最常用、最灵活的响应方法。它可以根据传入的数据类型,自动设置合适的 Content-Type,并将数据返回给客户端。具体规则如下:

  • 传入字符串 ⇒ Content-Type: text/html
  • 传入 Buffer(二进制数据) ⇒ Content-Type: application/octet-stream
  • 传入对象或数组 ⇒ Content-Type: application/json(自动序列化为 JSON 字符串)

例如,返回二进制数据:

app.use((req, res) => {
  const buf = Buffer.from('Hello World')
  res.send(buf)
})

开发中,res.send() 适合快速返回字符串、HTML、JSON、Buffer 等各种类型的数据。

4. 设置响应状态码:res.status()

有时候需要主动设置响应码,比如 404(未找到)、500(服务器错误)、201(创建成功)等。Express 提供了 res.status() 方法,链式调用非常方便:

app.use((req, res) => {
  // 设置响应码为 333(非标准码,仅作演示)
  // 合理的做法应使用标准 HTTP 状态码
  res.status(333).send('end')
})
  • 若设置的状态码是标准 HTTP 状态码,则响应头会自动带上对应的描述文本(如 404 Not Found)。
  • 若设置为非标准码,描述会显示为 UNKNOWN,但浏览器和客户端依然能识别到响应码本身。
  • res.status() 仅设置状态码,不会自动结束响应。需配合 send(), json(), end() 等方法一起使用。