express源码实现4——res.send

res.send的作用

原生node中res.end()方法中只能传递String和Buffer类型,并且传递中文字符串的时候由于编码的问题会显示乱码。为了解决这个问题,express中通过中间件在res上封装了一个send方法,可以传递字符串、对象(转换成JSON)、状态码。

源码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
res.send=function (msg) {
//是字符串或buffer
if (typeof msg=='string'||Buffer.isBuffer(msg)) {
res.setHeader('content-type','text/plain;charset=utf8');
res.end(msg);
}
//是对象
if (typeof msg=='object') {
res.setHeader('content-type','applicaton/json;charset=utf8');
res.end(JSON.stringify(msg));
}
//是数字类型,转换成状态码
if (typeof msg=='number') {
var STATUS_CODE=require('http').STATUS_CODES;
res.statusCode=msg;
res.end(STATUS_CODE[msg]);
}
}