开发者学堂课程【Node.js 入门与实战:res.send()和res.end()区别】学习笔记,与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/588/detail/8312
res.send()和res.end()区别
一、res.send()和res.end()区别
index.js 代码块如下:
//入口文件
// 1.加载 express 模块
var express = require( ' express' );
// 2.创建一个 app 对象(类似于创建一个 server 对象)
var app = express();
//注册路由
//通过中间件监听指定的路由的请求
// req.url 中的 pathname 部分必须和/index 一致
app.get('/index'
,
function (req, res) {
// body...
res.end('hello world!’
)
;
});
// 3.启动服务
app. listen(9092, function () {
console . log( 'http://localhost:9092 );
});
此处 res.end 作用是把数据响应给浏览器,同时结束请求,其中可以接收两种数据类型参数,分别是字符串和 Buffer 对象类型参数,传来的字符串会响应给浏览器,同时结束这个请求。
但是在使用 express 的时候,也可以不使用 res.end()方法,使用 express 中扩展的方法 res.send(),如,
…
app.get('/index'
,
function (req, res) {
// body...
res.
s
end('hello world!’
)
;
});
…
然后进行测试,将网址直接复制 http://localhost:9092到浏览器打开会发现,因为没有路由的请求,所以没有执行 res.send 代码,因此需要一个匹配,
如,localhost:9092/index,回车访问,页面显示出 hello world!。
通过这种方式好像显现不出res.send()和res.end()区别,要看到区别需将 res.end('hello world!’) 中加入你好世界!,
如 res.end('hello world! 你好世界!’),再次运行到浏览器会发现,中文输出为乱码。
同样的方法将 res.send('hello world!’) 改为 res.send('hello world! 你好世界!’),
运行后发现成功输出 hello world! 你好世界!,没有乱码。res.end() 中文输出乱码和 res.send() 不乱码,这就是区别所在,
参数类型不同,res.end() 支持参数类型有两种,为 Buffer 对象或 String 字符串,而 res.send() 参数支持多种参数类型,如 Buffer 对象、String 字符串、一个 object 对象,Array数组对象,支持参数类型多于res.end()。
进入 Express 官网中找到Response下的res.send()方法,点击进入可看到 res.send() 方法定义,res.send([body])的[ ]中有一个参数,当调用 res.send() 时候可以传参数也可以不传,如果传的话会把这个数据发给浏览器结束这个请求,不传的话直接结束请求不发任何数据。而对于res.send()输出中文不乱码是因为send内部自动生成了一些响应报头,通过浏览器开发者工具点开index请求可查看生成报头,其中的一个响应报头就是 Content-Tpye 而且编码是 charset=uft-8,而 end没生成所以中文乱码。