认识 Express 的 res.send() 和 res.end()

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

2.png


前言


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


// 方法1
app.get("/end", (req, res, next) =>{
    res.end(xxx);
});
// 方法2
app.get("/send", (req, res, next) =>{
    res.send(xxx);
});


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


Express 之 res.end()


定义


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


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


1.png


语法


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


参数解析:


  • data <string> | <Buffer>
  • encoding <string>
  • callback <Function>


深入


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


0.png


Express 之 res.send()


定义


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


语法


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


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


深入


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


// node_modules/express/lib/response.js
res.send = function send(body) {
  var chunk = body;
  var encoding;
  ……
  if (req.method === 'HEAD') {
    // skip body for HEAD
    this.end();
  } else {
    // respond
    this.end(chunk, encoding);
  }
  return this;
};


对比


相同点


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


  1. 二者最终都是回归到  http.ServerResponse.Useresponse.end() 方法。
  2. 二者都会结束当前响应流程。


不同点


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


  1. 前者只能发送 string 或者 Buffer 类型,后者可以发送任何类型数据。
  2. 从语义来看,前者更适合没有任何响应数据的场景,而后者更适合于存在响应数据的场景。


总结


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


~本文完,感谢阅读!


学习有趣的知识,结识有趣的朋友,塑造有趣的灵魂!


你来,怀揣期望,我有墨香相迎! 你归,无论得失,唯以余韵相赠!


知识与技能并重,内力和外功兼修,理论和实践两手都要抓、两手都要硬!




相关文章
|
SQL 前端开发 关系型数据库
mysql根据父节点递归查询所有子节点,List转树形结构工具类
mysql根据父节点递归查询所有子节点,List转树形结构工具类
1390 0
mysql根据父节点递归查询所有子节点,List转树形结构工具类
|
JavaScript 前端开发 Java
【vue-router】useRoute 和 useRouter 的区别
【vue-router】useRoute 和 useRouter 的区别
|
移动开发 前端开发 应用服务中间件
React两种路由模式的实现原理
React两种路由模式的实现原理
315 3
|
12月前
|
小程序
Galacean Effects 2.0 带来了哪些新功能?
各位特效魔法师、创意小能手们,我们近期解锁了一系列超能力,或许会让你的创作如虎添翼,酷炫到飞起!✨🎉🎉
980 1
|
8月前
|
数据采集 JavaScript 前端开发
京东商品详情 API 接口指南(Python 篇)
本简介介绍如何使用Python抓取京东商品详情数据。首先,需搭建开发环境并安装必要的库(如requests、BeautifulSoup和lxml),了解京东反爬虫机制,确定商品ID获取方式。通过发送HTTP请求并解析HTML,可提取价格、优惠券、视频链接等信息。此方法适用于电商数据分析、竞品分析、购物助手及内容创作等场景,帮助用户做出更明智的购买决策,优化营销策略。
|
存储 监控 JavaScript
使用Node.js构建实时聊天应用的技术指南
【5月更文挑战第12天】本文指导使用Node.js、Express.js和Socket.IO构建实时聊天应用。技术栈包括Node.js作为服务器环境、WebSocket协议、Express.js作为Web框架和Socket.IO处理实时通信。步骤包括项目初始化、安装依赖、搭建服务器、实现实时聊天功能、运行应用以及后续的完善和部署建议。通过这个指南,读者可以学习到创建简单实时聊天应用的基本流程。
|
11月前
|
关系型数据库 MySQL 数据库
MySQL 查询结果求和详解
MySQL 查询结果求和详解
469 0
|
11月前
|
运维 NoSQL BI
简道云搭载阿里云MongoDB数据库,帮助数以万计企业重构业务系统
通过与MongoDB和阿里云团队的合作,让简道云少走了弯路,保障了线上服务的长期稳定运行,提高了吞吐效率,并相应降低了线上运行成本
|
设计模式 SQL 前端开发
2024年阿里Android高级面试题分享,送给正在迷茫的你
2024年阿里Android高级面试题分享,送给正在迷茫的你
|
JavaScript
Typescript中 interface 和 type 的区别是什么?
在 TypeScript 中,interface 和 type 都用于定义类型,但它们有一些区别。
598 0