request和 response对象介绍

http模块中request(http.IncomingMessage 类) 和 response(http.ServerResponse 类) 对象介绍

request:服务器解析用户提交的 http 请求报文, 将结果解析到 request对象中,凡是要获取和用户请求相关的数据,都可以通过request对象获取

response:在服务器端用来向用户做出响应的对象,凡是需要向用户(客户端)响应的操作,都是需要response对象进行

一、request对象常用的属性

request.headers:获取所有请求报文头,返回的是一个对象,这个对象中包含了所有的请求报文头

request.rawHeaders:获取所有请求报文头 返回的是一个数组,数组中保存的都是请求报文头的字符串

request.httpVersion:获取请求客户端所使用的http版本

request.method:获取客户端请求使用的方法(POST、GET、PUT、DELETE等)

request.url:获取这个请求的路径(获取请求报文中的请求路径,不包含主机名称、端口号、协议)

const http = require('http');

http.createServer((req, res) => {

  console.log('req.headers返回的是一个对象:');
  console.log(req.headers);

  console.log('req.rawHeaders返回的是一个数组:');
  console.log(req.rawHeaders);

  console.log('req.httpVersion 获取请求客户端所使用的http版本:');
  console.log(req.httpVersion);

  console.log('req.method 获取客户端请求使用的方法(POST、GET、PUT、DELETE等):');
  console.log(req.method);

  console.log('req.url 获取这个请求的路径:');
  console.log(req.url);

  res.end('over');

}).listen(8080, () => {
  console.log('http://localhost:8080');
});

node命令运行上面代码会输出两遍,是因为发送了两个请求:

二、response对象常用的属性和方法

(1)response.write()

response.write()会发送一块响应主体;可被多次调用,以便提供连续的响应主体片段。

(2)response.end()

response.end()会通知服务器,所有响应头和响应主体都已被发送,即服务器将其视为响应已完成。

每次响应都必须调用 response.end() 方法,否则,客户端会一直等待服务器响应完成。

response.end([data][, encoding][, callback])  中有三个可选参数,第一个参数是响应的数据(数据类型只能是string或Buffer类型的),第二个参数指定响应的数据的编码方式,第三个参数是一个回调函数(在响应结束后调用)

如果指定了 data,则相当于调用 response.write(data, encoding) 之后再调用 response.end(callback)。

res.end('Hello World!!!');

等价于

  res.write('Hello World!!!');
  res.end();

(3)response.setHeader()

设置响应报文头

response.setHeader()必须放在 response.write() 和 response.end() 之前设置

因为即使我们不设置响应报文头,系统也会默认有响应报文头,并且默认发送给浏览器,当已经发送过响应报文头,就不能再设置了,否则就会报错

(4)response.statusCode

设置http响应状态码

(5)response.statusMessage

设置http响应状态码对应的消息

response.statusCode和response.statusMessage也必须放在 response.write() 和 response.end() 之前设置

  res.statusCode = 404;
  res.statusMessage = 'Not Found!';
  res.setHeader('Content-Type', 'text/plain; charset=utf-8');

(6)response.writeHead()

发送一个响应头给请求。

response.writeHead(statusCode[, statusMessage][, headers])

第一个参数必有,设置http响应状态码;第二个参数可选,设置http响应状态码对应的消息;第三个参数可选,是一个对象,设置响应头;该方法在消息中只能被调用一次;也必须放在 response.write() 和 response.end() 之前设置。

res.writeHead(404, 'Not Found!', {'Content-Type': 'text/plain; charset=utf-8'});

等价于

  res.statusCode = 404;
  res.statusMessage = 'Not Found!';
  res.setHeader('Content-Type', 'text/plain; charset=utf-8');

注意:每个请求都会调response.writeHead() 这个方法,只不过我们不写的时候,系统会默认调用这个方法发送请求头。

response.statusCode设置的状态码、response.statusMessage设置的状态码对应的消息以及response.setHeader() 设置的响应头会与 response.writeHead() 设置的响应头合并,且 response.writeHead() 的优先。

例如:

const http = require('http');

http.createServer((req, res) => {
  res.statusCode = 200;
  res.statusMessage = 'ok';
  res.setHeader('Content-Type', 'text/html; charset=utf-8');
  res.writeHead(404, 'Not Found!', {'Content-Type': 'text/plain; charset=utf-8'});
  res.write('Hello, 小明!');
  res.end();

}).listen(8080, () => {
  console.log('http://localhost:8080');
});

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值