Nodejs核心模块之net和http的使用详解

2020-06-17 06:37:26易采站长站整理

前言

net和http模块都是node核心模块之一,他们都可以搭建自己的服务端和客户端,以响应请求和发送请求。

net模块服务端/客户端

这里写的net模块是基于tcp协议的服务端和客户端,用到net.createServer和net.connect实现的一个简单请求与响应的demo。


//tcp服务端
var net = require('net')
var sever=net.createServer(function(connection){
//客户端关闭连接执行的事件
connection.on('end',function(){
// console.log('客户端关闭连接')
})
connection.on('data',function(data){
console.log('服务端:收到客户端发送数据为'+data.toString())
})
//给客户端响应的数据
connection.write('response hello')
})
sever.listen(8080,function(){
// console.log('监听端口')
})


//tcp客户端
var net = require('net')
var client = net.connect({port:8080},function(){
// console.log("连接到服务器")
})
//客户端收到服务端执行的事件
client.on('data',function(data){
console.log('客户端:收到服务端响应数据为'+data.toString())
client.end()
})
//给服务端传递的数据
client.write('hello')
client.on('end',function(){
// console.log('断开与服务器的连接')
})

运行结果

http模块四种请求类型

http服务端:

http.createServer创建了一个http.Server实例,将一个函数作为HTTP请求处理函数。这个函数接受两个参数,分别是请求对象(req)处理请求的一些信息和响应对象(res)处理响应的数据。


//http服务端
const http = require("http");
var fs = require("fs");
var url = require('url')

http.createServer(function (req, res) {
var urlPath = url.parse(req.url);
var meth = req.method
//urlPath.pathname 获取及设置URL的路径(path)部分
//meth 获取请求数据的方法,一个路径只能被一种方法请求,其他方法请求时返回404
if (urlPath.pathname === '/' && meth === 'GET') {
res.write(' get ok');
} else if (urlPath.pathname === '/users' && meth === 'POST') {
res.writeHead(200, {
'content-type': 'text/html;charset=utf-8'
});
fs.readFile('user.json', function (err, data) {
if (err) {
return console.error(err);
}
var data = data.toString();
// 返回数据
res.write(data);
});
} else if (urlPath.pathname === '/list' && meth === 'PUT') {
res.write('put ok');