详解nodejs http请求相关总结


Posted in NodeJs onMarch 31, 2019

nodejs http请求相关总结

通过node提供的http模块,可以通过其提供的get()和request()两个方法发起http请求,get()是对request()方法的封装,方便发起get请求,如果要实现post请求,那么需要对request()方法进行封装。

request()方法

let req = http.request("http://www.baidu.com", (res) =>{
 console.log(res.statusCode);
});
req.end();//必须调用end()方法结束请求

需要注意的是,使用request()方法发起http请求的时候,request()方法会返回一个请求对象,必须调用返回的请求对象的end()方法,表示请求动作已经完成,否则请求将会一直挂起,等待请求动作的完成。

request()方法参数问题:

request()的第一个参数可以直接是一个url地址,第二个参数为一个请求完成收到服务器响应后的回调函数,回调函数的参数只有一个即响应对象res

let req = http.request("http://www.baidu.com", (res) =>{
 console.log(res.statusCode);
});
req.end();//必须调用end()方法结束请求

request()的第一个参数可以是一个请求数据配置对象,第二个参数为一个请求完成收到服务器响应后的回调函数,回调函数的参数只有一个即响应对象res

let req = http.request({hostname:"www.baiduc.com",port:80}, (res) =>{
 console.log(res.statusCode);
});
req.end();//必须调用end()方法结束请求

需要注意的是,request()方法不能同时传递url地址和请求数据配置对象,只能二者选一个,也就是说request()方法只能传递两个参数

get()方法

let req = http.get("http://www.baidu.com", (res) =>{
 console.log(res.statusCode);
});

get()方法发起http请求的时候,get()方法也会返回一个请求对象,但是不用通过这个请求对象去调用end()方法,这一点和request()方法不同。

get()方法参数问题:

get()方法和request()方法的参数是一样的,就是不需要调用end()方法。

设置请求超时的方法

1. 要设置请求超时,可以通过get()或者request()方法返回的请求对象setTimeout()方法来实现。

let req = http.get("http://www.baidu.com", (res) =>{
 console.log(res.statusCode);
});
 req.setTimeout(1,()=>{
  console.log(`请求超时了`);
  req.abort();//终止请求
 });

1毫秒之后如果还没收到响应,那么就会触发setTimeout的回调函数,此时可以直接终止请求。

2. 也可以自己设立一个定时器来实现,如:

let requestTimer = null;
let req = http.get("http://www.baidu.com", (res) =>{
 console.log(res.statusCode);
 if(res.statusCode === 200){
  clearTimeout(requestTimer);//请求超时之前完成,清除超时定时器
 }
});

requestTimer = setTimeout(() => {
  req.emit("timeout", {"msg": "请求超时了"});//如果请求超时了则发送timeout事件
}, 1000);

req.on("timeout",(msg) => {//监听timeout事件并终止请求
 console.log(`收到timeout事件!`);
 req.abort();
 console.log(`终止请求`);
});

获取响应数据

get()和request()方法回调函数中的响应对象res中并不携带响应数据,如果要获取响应数据,那么需要通过响应对象去监听data和end事件来获取。

let req = http.get("http://www.baidu.com", (res) =>{
 let resStr = "";
 res.on("data", (res) => {
  resStr += res;
 }); 
 res.on("end", () => {
  console.log(resStr);
 });
});

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

NodeJs 相关文章推荐
轻松创建nodejs服务器(4):路由
Dec 18 NodeJs
快速掌握Node.js之Window下配置NodeJs环境
Mar 21 NodeJs
NodeJS连接MongoDB数据库时报错的快速解决方法
May 13 NodeJs
Nodejs进阶:核心模块net入门学习与实例讲解
Nov 21 NodeJs
nodejs开发——express路由与中间件
Mar 24 NodeJs
深入理解nodejs中Express的中间件
May 19 NodeJs
docker中编译nodejs并使用nginx启动
Jun 23 NodeJs
nodejs 搭建简易服务器的图文教程(推荐)
Jul 18 NodeJs
nodejs连接mysql数据库及基本知识点详解
Mar 20 NodeJs
nodejs 简单实现动态html的方法
May 12 NodeJs
Nodejs实现多文件夹文件同步
Oct 17 NodeJs
5分钟教你用nodeJS手写一个mock数据服务器的方法
Sep 10 NodeJs
详解Nodejs get获取远程服务器接口数据
Mar 26 #NodeJs
nodejs微信开发之自动回复的实现
Mar 17 #NodeJs
nodejs微信开发之接入指南
Mar 17 #NodeJs
nodejs微信开发之授权登录+获取用户信息
Mar 17 #NodeJs
详解nodejs 开发企业微信第三方应用入门教程
Mar 12 #NodeJs
详解NodeJS Https HSM双向认证实现
Mar 12 #NodeJs
NodeJs入门教程之定时器和队列
Mar 08 #NodeJs
You might like
把77A收信机改造成收音机
2021/03/02 无线电
初探PHP5
2006/10/09 PHP
discuz安全提问算法
2007/06/06 PHP
PHP+MySQL 制作简单的留言本
2009/11/02 PHP
php抽奖小程序的实现代码
2013/06/18 PHP
简单实用的网站PHP缓存类实例
2014/07/18 PHP
php实现异步将远程链接上内容(图片或内容)写到本地的方法
2016/11/30 PHP
PHP7新特性之抽象语法树(AST)带来的变化详解
2018/07/17 PHP
超级简单的图片防盗(HTML),好用
2007/04/08 Javascript
基于jQuery的可以控制左右滚动及自动滚动效果的代码
2010/07/25 Javascript
原生javascript获取元素样式属性值的方法
2010/12/25 Javascript
基于json的jquery地区联动效果代码
2011/07/06 Javascript
关于javascript function对象那些迷惑分析
2011/10/24 Javascript
JQuery.closest(),parent(),parents()寻找父结点
2012/02/17 Javascript
javascript设置连续两次点击按钮时间间隔的方法
2014/10/28 Javascript
理解AngularJs指令
2015/12/10 Javascript
自己封装的一个简单的倒计时功能实例
2016/11/23 Javascript
JS判断鼠标进入容器的方向与window.open新窗口被拦截的问题
2016/12/23 Javascript
vue2.0实战之使用vue-cli搭建项目(2)
2017/03/27 Javascript
Angular5给组件本身的标签添加样式class的方法
2018/04/07 Javascript
JavaScript实现计算圆周率到小数点后100位的方法示例
2018/05/08 Javascript
微信小程序按钮点击跳转页面详解
2019/05/06 Javascript
vue实现条件叠加搜索的解决方法
2019/05/28 Javascript
一起写一个即插即用的Vue Loading插件实现
2019/10/31 Javascript
JavaScript实现烟花绽放动画效果
2020/08/04 Javascript
JavaScript检测是否开启了控制台(F12调试工具)
2020/10/02 Javascript
Python实现在Linux系统下更改当前进程运行用户
2015/02/04 Python
从头学Python之编写可执行的.py文件
2017/11/28 Python
Python模块的加载讲解
2019/01/15 Python
python如何实现异步调用函数执行
2019/07/08 Python
英国汽车座椅和婴儿车购物网站:Uber Kids
2017/04/19 全球购物
阿联酋航空官方网站:Emirates
2017/10/17 全球购物
size?爱尔兰官方网站:英国伦敦的球鞋精品店
2019/03/31 全球购物
安全标兵事迹材料
2014/08/17 职场文书
无财产无子女离婚协议书范文
2014/09/14 职场文书
群众路线查摆问题整改措施思想汇报
2014/10/10 职场文书