详解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+express+html5 实现拖拽上传
Aug 08 NodeJs
NodeJS制作爬虫全过程(续)
Dec 22 NodeJs
NodeJS学习笔记之Http模块
Jan 13 NodeJs
Windows系统中安装nodejs图文教程
Feb 28 NodeJs
NodeJs下的测试框架Mocha的简单介绍
Feb 22 NodeJs
docker中编译nodejs并使用nginx启动
Jun 23 NodeJs
nodejs开发微信小程序实现密码加密
Jul 11 NodeJs
NodeJS安装图文教程
Apr 19 NodeJs
Nodejs中的JWT和Session的使用
Aug 21 NodeJs
nodejs分离html文件里面的js和css的方法
Apr 09 NodeJs
nodejs使用node-xlsx生成excel的方法示例
Aug 22 NodeJs
NodeJS开发人员常见五个错误理解
Oct 14 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
php短域名转换为实际域名函数
2011/01/17 PHP
经典的解除许多网站无法复制文字的绝招
2006/12/31 Javascript
jquery 1.3.2 IE8中的一点点的小问题解决方法
2009/07/10 Javascript
Ajax+Json 级联菜单实现代码
2009/10/27 Javascript
js四舍五入数学函数round使用实例
2014/05/09 Javascript
Javascript定义类(class)的三种方法详解
2015/03/13 Javascript
自动完成的搜索框javascript实现
2016/02/26 Javascript
微信开发之调起摄像头、本地展示图片、上传下载图片实例
2016/12/08 Javascript
webpack入门+react环境配置
2017/02/08 Javascript
Angularjs的$http异步删除数据详解及实例
2017/07/27 Javascript
使用nodejs+express实现简单的文件上传功能
2017/12/27 NodeJs
深入剖析Node.js cluster模块
2018/05/23 Javascript
vue实现word,pdf文件的导出功能
2018/07/31 Javascript
解决vue+element 键盘回车事件导致页面刷新的问题
2018/08/25 Javascript
jQuery插件实现非常实用的tab栏切换功能【案例】
2019/02/18 jQuery
[02:44]完美大师赛主赛事淘汰赛第二日观众采访
2017/11/24 DOTA
Python调用C/C++动态链接库的方法详解
2014/07/22 Python
Python函数中定义参数的四种方式
2014/11/30 Python
Python实现身份证号码解析
2015/09/01 Python
Python读大数据txt
2016/03/28 Python
python3实现暴力穷举博客园密码
2016/06/19 Python
详解Python异常处理中的Finally else的功能
2017/12/29 Python
pytorch中的自定义数据处理详解
2020/01/06 Python
配置python的编程环境之Anaconda + VSCode的教程
2020/03/29 Python
使用Django清空数据库并重新生成
2020/04/03 Python
python爬虫scrapy框架的梨视频案例解析
2021/02/20 Python
英国汽车座椅和婴儿车购物网站:Uber Kids
2017/04/19 全球购物
运动会邀请函范文
2014/01/31 职场文书
大专生毕业的自我评价
2014/02/06 职场文书
财务学生的职业生涯发展
2014/02/11 职场文书
活动总结模板
2014/05/09 职场文书
死亡证明书样本说明
2014/10/18 职场文书
求职导师推荐信范文
2015/03/27 职场文书
大学开学感言
2015/08/01 职场文书
2016高中社会实践心得体会范文
2016/01/14 职场文书
当你焦虑迷茫时,请读读这6句话
2019/07/24 职场文书