Node Http模块
我们可以使用 Node 创建一个服务器,在 Node 中专门提供了一个核心模块:http
http 这个模块的职责,就是帮助我们创建编写服务器的
1、加载http核心模块
var http = require('http');
2、使用http.createServer()方法创建了一个web服务器,返回一个Server实例
var server = http.createServer();
3、服务器要干什么?
- 提供服务:对数据的服务
- 发请求
- 接收请求
- 给个反馈 (发送响应)
4、简单web服务器
http.server 是一个基于事件的 HTTP 服务器,所有的请求都被封装到独立的事件当中。
let http = require('http');
//创建web服务器,提供服务,处理客户端的请求
//普通方式监听
let server = http.createServer((req,res)=>{
//req客户端请求的相关信息,res返回响应信息
let url = req.url;
//解决中文乱码
res.writeHead(200, {'Content-Type': 'text/plain;charset=utf-8'});
res.end('访问路径:'+url);
}).listen(9000);
//request事件监听
/*server.on('request', (req, res) => {
console.log(req.url);
//设置应答头信息
res.writeHead(200, { 'Content-Type': 'text/html' });
res.write('HHHHH<br>');
});
server.listen(9000);*/
//当TCP建立连接的时候,该事件被触发,提供了一个参数socket,为net.socket的实例(底层协议对象)
server.on('connection',(req,socket,head)=>{
console.log('有连接');
});
在浏览器通过http://localhost:9000/即可访问:
5、http.ServerRequset
http 请求分为请求头和请求体,如果请求的内容少的话就直接在请求头协议完成之后立即读取,请求体可能相对较长一点,需要一定的时间传输。因此提供了三个事件用于控制请求体传输:
- data:当请求体数据到来时,该事件被触发,该事件一共一个参数chunk,表示接受到的数据。
- end:当请求体数据传输完成时,该事件被触发,此后将不会再有数据到来。
- close:用户当前请求结束时,该事件被触发,不同于 end,如果用户强制终止了传输,也会触发 close。
serverRequest常用信息:
let http = require('http');
let server = http.createServer((req,res)=>{
//客户端请求是否发送完成
console.log(req.complete);
//http协议版本
console.log(req.httpVersion);
//connnection
console.log(req.socket);
//http请求头
console.log(req.headers);
//http请求方法
console.log(req.method);
res.writeHead(200,{'Content-Type':'text/plain'});
res.write("hahahaha");
res.end();
}).listen(9000);