四大类
http 模块拥有四大类, 分别是 http.Server, http.ClientRequest, http.IncomingMessage, http.ServerResponse
这里只对简单的基础知识总结
一个简单的例子中就包含这四大类的实例
const http = require('http')
const server = http.createServer((req, res) => {
res.writeHead(200, 'ok', {
'Content-Type': 'text/plain'
})
res.end('hello node')
}).listen(3000)
const client = http.get('http://127.0.0.1:3000', function(clientRes) {
console.log(clientRes)
})
例子解释
server 就是 http.Server 的实例, 创建了服务端,接受客户端发送来的所有请求
client 就是 http.ClientRequest 的实例, 向服务端发送请求
server 中的 res 就是 http.ServerResponse 的实例, 用来设置返回请求的响应内容
比较特殊的就是 http.IncomingMessage 的实例了, 有两个 , 一个是 server 中的 req, 一个是 client 中的 clientRes
server 中的这个req 可以得到请求中的信息
client 中的这个clientRes 可以得到 响应中的信息
http.IncomingMessage 类
这个类的实例, 在server 和 在 client 中有一些细微的差异
在server处 : 特有 属性 url
在client处 : 特有属性 statusCode 和 statusMessage
其他的都有的属性和方法有
属性: headers, httpVersion, rawHeaders, socket
方法: .destory() .setTimeout()
例子1 , 在服务端,获取基本信息
const http = require('http')
http.createServet((req, res) => {
console.log(req.url)
console.log(req.method)
console.log(req.headers)
console.log(req.httpVersion)
res.end('ok')
}).listen(3000)
例子2, 在服务端获取get请求参数
var http = require('http');
var url = require('url');
var querystring = require('querystring');
var server = http.createServer(function(req, res){
var urlObj = url.parse(req.url);
var query = urlObj.query;
var queryObj = querystring.parse(query);
console.log( JSON.stringify(queryObj) );
res.end('ok');
});
server.listen(3000);
例子3 在客户端
const client = http.get('http://abc.com:80/',function(res) {
console.log(res.statusCode)
console.log(res.statusMessage)
})
http.ServerResponse 类
设置 状态码 和 描述信息
res.writeHead(200, 'ok')
或者
res.statusCode(200)
res.statusMessage('ok')
设置响应头
const http = require('http')
http.createServer((req,res) => {
res.setHeader('Content-Type': 'text/html')
res.writeHead(200, 'ok', {
'Content-Type': 'text/plain'
})
res.end('hello')
}).listen(3000)
// res.setHeader() 和 res.writeHead() 都能够设置请求头, res.writeHead()可以覆盖res.setHeader()
// 响应头的其他操作
// 增
res.setHeader('Conent-Type', 'text/html')
// 删
res.removeHeader('Content-Type')
// 改
res.setHeader('Content-Type', 'text/html')
res.setHeader('Content-Type', 'text/plain')
// 查
res.getHeader('congent-type')
设置响应体
res.write(chunk, [encoding], [callBack])
res.end()
//两个都可以