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


Posted in NodeJs onApril 02, 2019

前言

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('断开与服务器的连接')
})

运行结果

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

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

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');
  } else if (urlPath.pathname === '/detail' && meth === 'DELETE') {
    res.write(' delete ok');
  } else {
    res.writeHead(404, {
      'content-type': 'text/html;charset=utf-8'
    });
    res.write('404')
  }
  res.on('data', function (data) {
    console.log(data.toString())
  })

}).listen(3000, function () {
  console.log("server start 3000");
});

http客户端:

http模块提供了两个创建HTTP客户端的方法http.request和http.get,以向HTTP服务器发起请求。http.get是http.request快捷方法,该方法仅支持GET方式的请求。

http.request(options,callback)方法发起http请求,option是请求的的参数,callback是请求的回掉函数,在请求被响应后执行,它传递一个参数,为http.ClientResponse的实例,处理返回的数据。

options常用的参数如下:

1)host:请求网站的域名或IP地址。
2)port:请求网站的端口,默认80。
3)method:请求方法,默认是GET。
4)path:请求的相对于根的路径,默认是“/”。请求参数应该包含在其中。
5)headers:请求头的内容。

nodejs实现的爬虫其实就可以用http模块创建的客户端向我们要抓取数据的地址发起请求,并拿到响应的数据进行解析。

get

//http客户端
const http = require("http");
// 发送请求的配置
let config = {
  host: "localhost",
  port: 3000,
  path:'/',
  method: "GET",
  headers: {
    a: 1
  }
};
// 创建客户端
let client = http.request(config, function(res) {
  // 接收服务端返回的数据
  let repData='';
  res.on("data", function(data) {
    repData=data.toString()
    console.log(repData)
  });
  res.on("end", function() {
    // console.log(Buffer.concat(arr).toString());
  });
});
// 发送请求
client.end();结束请求,否则服务器将不会收到信息

客户端发起http请求,请求方法为get,服务端收到get请求,匹配路径是首页,响应数据:get ok。

post

//http客户端
var http = require('http');
var querystring = require("querystring");
var contents = querystring.stringify({
  name: "艾利斯提",
  email: "m778941332@163.com",
  address: " chengdu",
});
var options = {
  host: "localhost",
  port: 3000,
  path:"/users",
  method: "POST",
  headers: {
    "Content-Type": "application/x-www-form-urlencoded",
    "Content-Length": contents.length
  }
};
var req = http.request(options, function (res) {
  res.setEncoding("utf8");
  res.on("data", function (data) {
    console.log(data);
  })
})

req.write(contents);
//结束请求,否则服务器将不会收到信息
req.end(); 
//响应的数据为
{
  "user1" : {
    "name" : "mahesh",
    "password" : "password1",
    "profession" : "teacher",
    "id": 1
  },
  "user2" : {
    "name" : "suresh",
    "password" : "password2",
    "profession" : "librarian",
    "id": 2
  }
 }

客户端发起http请求,请求方法为post,post传递数据,匹配路径是/users,服务器响应请求并返回数据user.json里的内容。

put

//http客户端
const http = require("http");
// 发送请求的配置
let config = {
  host: "localhost",
  port: 3000,
  path:"/list",
  method: "put",
  headers: {
    a: 1
  }
};
// 创建客户端
let client = http.request(config, function(res) {
  // 接收服务端返回的数据
  let repData='';
  res.on("data", function(data) {
    repData=data.toString()
    console.log(repData)
  });
  res.on("end", function() {
    // console.log(Buffer.concat(arr).toString());
  });
});
// 发送请求
client.end();

客户端发起http请求,请求方法为put,服务端收到put请求,匹配路径为/list,响应数据:put ok

delect

//http delete请求客户端
var http = require('http');
var querystring = require("querystring");
var contents = querystring.stringify({
  name: "艾利斯提",
  email: "m778941332@163.com",
  address: " chengdu",
});
var options = {
  host: "localhost",
  port: 3000,
  path:'/detail',
  method: "DELETE",
  headers: {
    "Content-Type": "application/x-www-form-urlencoded",
    "Content-Length": contents.length
  }
};
var req = http.request(options, function (res) {
  res.setEncoding("utf8");
  res.on("data", function (data) {
    console.log(data);
  })
})

req.write(contents);
req.end();

服务端收到delete请求,匹配路径为/detail,响应数据:delete ok

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
nodejs实用示例 缩址还原
Dec 28 NodeJs
Nodejs+express+html5 实现拖拽上传
Aug 08 NodeJs
基于NodeJS的前后端分离的思考与实践(三)轻量级的接口配置建模框架
Sep 26 NodeJs
初始Nodejs
Nov 08 NodeJs
轻松创建nodejs服务器(9):实现非阻塞操作
Dec 18 NodeJs
NodeJS学习笔记之MongoDB模块
Jan 13 NodeJs
简单好用的nodejs 爬虫框架分享
Mar 26 NodeJs
nodejs学习笔记之路由
Mar 27 NodeJs
nodejs使用express创建一个简单web应用
Mar 31 NodeJs
浅析 NodeJs 的几种文件路径
Jun 07 NodeJs
详解使用PM2管理nodejs进程
Oct 24 NodeJs
Nodejs 和 Electron ubuntu下快速安装过程
May 04 NodeJs
Nodejs中的require函数的具体使用方法
Apr 02 #NodeJs
NodeJs之word文件生成与解析的实现代码
Apr 01 #NodeJs
详解nodejs http请求相关总结
Mar 31 #NodeJs
详解Nodejs get获取远程服务器接口数据
Mar 26 #NodeJs
nodejs微信开发之自动回复的实现
Mar 17 #NodeJs
nodejs微信开发之接入指南
Mar 17 #NodeJs
nodejs微信开发之授权登录+获取用户信息
Mar 17 #NodeJs
You might like
PHP获取MSN好友列表类的实现代码
2013/06/23 PHP
php过滤所有恶意字符(批量过滤post,get敏感数据)
2014/03/18 PHP
深入解析PHP的Yii框架中的event事件机制
2016/03/17 PHP
JS操作XML中DTD介绍及使用方法分析
2019/07/04 PHP
ExtJs事件机制基本代码模型和流程解析
2010/10/24 Javascript
用Javascript评估用户输入密码的强度(Knockout版)
2011/11/30 Javascript
javascript + jquery实现定时修改文章标题
2014/03/19 Javascript
Angular2中Bootstrap界面库ng-bootstrap详解
2016/10/18 Javascript
Bootstrap源码解读导航条(7)
2016/12/23 Javascript
Bootstrap警告框(Alert)插件使用方法
2017/03/21 Javascript
js 函数式编程学习笔记
2017/03/25 Javascript
React Native模块之Permissions权限申请的实例相机
2017/09/28 Javascript
Vue2.0 slot分发内容与props验证的方法
2017/12/12 Javascript
详解ES6 系列之异步处理实战
2018/10/26 Javascript
在vue使用clipboard.js进行一键复制文本的实现示例
2019/01/15 Javascript
vue限制输入框只能输入8位整数和2位小数的代码
2019/11/06 Javascript
vue v-model的用法解析
2020/10/19 Javascript
[53:21]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS LGD-CDEC
2014/05/22 DOTA
Python 获取当前所在目录的方法详解
2017/08/02 Python
在PyCharm下打包*.py程序成.exe的方法
2018/11/29 Python
Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】
2019/06/18 Python
python 命令行传入参数实现解析
2019/08/30 Python
Python 生成一个从0到n个数字的列表4种方法小结
2019/11/28 Python
关于sys.stdout和print的区别详解
2019/12/05 Python
Python3实现个位数字和十位数字对调, 其乘积不变
2020/05/03 Python
python 爬取B站原视频的实例代码
2020/09/09 Python
Python pip 常用命令汇总
2020/10/19 Python
基于canvas使用贝塞尔曲线平滑拟合折线段的方法
2018/01/10 HTML / CSS
Mytheresa美国官网:德国知名的女性奢侈品电商
2017/05/27 全球购物
伯利陶器:Burleigh Pottery
2018/01/03 全球购物
MONNIER Frères英国官网:源自巴黎女士奢侈品配饰电商平台
2018/12/06 全球购物
bonprix荷兰网上商店:便宜的服装、鞋子和家居用品
2020/07/04 全球购物
大门门卫岗位职责
2013/11/30 职场文书
八一建军节感言
2014/02/28 职场文书
学校就业推荐信范文
2014/05/19 职场文书
2014党员学习习主席讲话思想汇报
2014/09/15 职场文书