详解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访问ActiveX对象,以操作Access数据库为例。
Dec 15 NodeJs
将nodejs打包工具整合到鼠标右键的方法
May 11 NodeJs
Nodejs+express+html5 实现拖拽上传
Aug 08 NodeJs
nodejs命令行参数处理模块commander使用实例
Sep 17 NodeJs
浅析nodejs实现Websocket的数据接收与发送
Nov 19 NodeJs
浅谈Nodejs中的作用域问题
Dec 26 NodeJs
nodejs制作爬虫实现批量下载图片
May 19 NodeJs
理解nodejs的stream和pipe机制的原理和实现
Aug 12 NodeJs
利用nodeJs anywhere搭建本地服务器环境的方法
May 12 NodeJs
webpack打包nodejs项目的方法
Sep 26 NodeJs
nodejs检测因特网是否断开的解决方案
Apr 17 NodeJs
nodejs搭建本地服务器并访问文件操作示例
May 11 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 和 XML: 使用expat函数(二)
2006/10/09 PHP
js Flash插入函数免激活代码
2009/03/31 Javascript
Jquery阻止事件冒泡 event.stopPropagation
2011/12/11 Javascript
jQuery中$.click()无效问题分析
2015/01/29 Javascript
js实现鼠标划过给div加透明度的方法
2015/05/25 Javascript
每天一篇javascript学习小结(Function对象)
2015/11/16 Javascript
jQuery实现对无序列表的排序功能(附demo源码下载)
2016/06/25 Javascript
通过bootstrap全面学习less
2016/11/09 Javascript
JavaScript数据结构之二叉树的删除算法示例
2017/04/13 Javascript
关于jQuery.ajax()的jsonp碰上post详解
2017/07/02 jQuery
简单谈谈关于Angular Cli打包的事
2017/09/05 Javascript
JS运动特效之任意值添加运动的方法分析
2018/01/24 Javascript
浅谈jquery fullpage 插件增加头部和版权的方法
2018/03/20 jQuery
javascript实现日历效果
2019/06/17 Javascript
微信小程序自定义modal弹窗组件的方法详解
2020/12/20 Javascript
利用 JavaScript 实现并发控制的示例代码
2020/12/31 Javascript
[02:38]DOTA2英雄基础教程 噬魂鬼
2014/01/03 DOTA
python 默认参数问题的陷阱
2016/02/29 Python
Python的爬虫程序编写框架Scrapy入门学习教程
2016/07/02 Python
Python中xrange与yield的用法实例分析
2017/12/26 Python
python实现SOM算法
2018/02/23 Python
解决Python中定时任务线程无法自动退出的问题
2019/02/18 Python
python根据txt文本批量创建文件夹
2020/12/08 Python
解决python文件双击运行秒退的问题
2019/06/24 Python
对python中assert、isinstance的用法详解
2019/11/27 Python
Pygame的程序开始示例代码
2020/05/07 Python
Tensorflow tf.tile()的用法实例分析
2020/05/22 Python
澳大利亚UGG工厂直销:Australian Ugg Boots
2017/10/14 全球购物
英国独特的时尚和生活方式品牌:JOY
2018/03/17 全球购物
小学优秀班集体申报材料
2014/05/25 职场文书
励志演讲稿500字
2014/08/21 职场文书
幼儿园托班开学寄语(2015秋季)
2015/05/27 职场文书
首次购房证明
2015/06/19 职场文书
2015年秋季小学开学标语
2015/07/16 职场文书
大学生先进个人主要事迹材料
2015/11/04 职场文书
那些美到让人窒息的诗句,值得你收藏!
2019/08/20 职场文书