浅析node Express框架中的 res.send() 和 res.end()

 3151

本篇文章带大家聊聊node Express框架,了解一下Express 中的 res.send() 和 res.end(),希望对大家有所帮助!


浅析node Express框架中的 res.send() 和 res.end()


在使用 Node.js 的服务端代码中,如果使用的是 Express 框架,那么对于一个请求,常常会有两种响应方式:

  1. // 方法1
  2. app.get("/end", (req, res, next) =>{
  3.     res.end(xxx);
  4. });
  5. // 方法2
  6. app.get("/send", (req, res, next) =>{
  7.     res.send(xxx);
  8. });

那么这两种方式究竟有何区别?各自的应用场景分别是什么?这是我今天需要讲清楚的。


Express 之 res.end()

定义

它可以在不需要任何数据的情况下快速结束响应。

这个方法实际上来自 Node 核心,具体来说是 http.ServerResponse.Use 的 response.end() 方法:


浅析node Express框架中的 res.send() 和 res.end()


语法

  1. res.end([data[, encoding]][, callback])

参数解析:

data <string> | <Buffer>

encoding <string>

callback <Function>

深入

如果给 res.end() 方法传入一个对象,会发生报错:

浅析node Express框架中的 res.send() 和 res.end()

Express 之 res.send()

定义

向请求客户端发送 HTTP 响应消息。

语法

  1. res.send([body[,statusCode]])

body 参数可以是 Buffer、Object、String、Boolean 或 Array。

深入

通过代码调试,我们可以发现,Express 的 res.send() 方法最终调用的也是 http.ServerResponse.Use 的 response.end() 方法:

  1. // node_modules/express/lib/response.js
  2. res.send = function send(body) {
  3.   var chunk = body;
  4.   var encoding;
  5.   ……
  6.   if (req.method === 'HEAD') {
  7.     // skip body for HEAD
  8.     this.end();
  9.   } else {
  10.     // respond
  11.     this.end(chunk, encoding);
  12.   }
  13.   return this;
  14. };

对比

相同点

Express 的 res.end() 和 res.send() 方法的相同点:

二者最终都是回归到 http.ServerResponse.Use 的 response.end() 方法。

二者都会结束当前响应流程。


不同点

Express 的 res.end() 和 res.send() 方法的不同点:

前者只能发送 string 或者 Buffer 类型,后者可以发送任何类型数据。

从语义来看,前者更适合没有任何响应数据的场景,而后者更适合于存在响应数据的场景。


总结

Express 的 res.end() 和 res.send() 方法使用上,一般建议使用 res.send()方法即可,这样就不需要关心响应数据的格式,因为 Express 内部对数据进行了处理。


本文网址:https://www.zztuku.com/index.php/detail-10827.html
站长图库 - 浅析node Express框架中的 res.send() 和 res.end()
申明:本文转载于《掘金社区》,如有侵犯,请 联系我们 删除。

评论(0)条

您还没有登录,请 登录 后发表评论!

提示:请勿发布广告垃圾评论,否则封号处理!!

    编辑推荐