res.send() 和 res.end() 的区别


在使用 Node.js 的服务端中一般会使用 Express 框架,后端服务器都会对客户端发送的请求做处理并响应,常常会有两种响应方式:res.send() 和  res.end()。


两者的主要区别:

响应方式不同

  • 如果服务器端没有数据要返回到客户端的话,就直接用res.end()。即向请求客户端发送 HTTP 响应消息。
  • 如果服务器需要有数据返回到客户端的话,就需要用res.send()。

响应的类型不同

  • res.end() 只能发送 string 或者 Buffer 类型
  • res.send() 可以发送任何类型的数据

 

附加

Buffer 类型

  • JavaScript 语言没有读取或操作二进制数据流的机制
  • Node.js 中引入了 Buffer 类型是我们可以操作 TCP流 或 文件流
  • Buffer 类型的对象类似于整数数组,但 Buffer 的大小是固定的、且在 V8 对外分配物理内存。Buffer 的大小在被创建时确定,且无法调整。(buf.length 是固定的,不允许修改)
  • Buffer 是全局的,所以使用的时候无需 require() 的方式来加载