详解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简单实现中英文翻译
May 04 NodeJs
NodeJS与HTML5相结合实现拖拽多个文件上传到服务器的实现方法
Jul 26 NodeJs
用NodeJS实现批量查询地理位置的经纬度接口
Aug 16 NodeJs
Nodejs下DNS缓存问题浅析
Nov 16 NodeJs
Nodejs实现短信验证码功能
Feb 09 NodeJs
NodeJs测试框架Mocha的安装与使用
Mar 28 NodeJs
nodeJs爬虫的技术点总结
May 13 NodeJs
Nodejs模块的调用操作实例分析
Dec 25 NodeJs
nodejs 使用http进行post或get请求的实例(携带cookie)
Jan 03 NodeJs
PHPStorm中如何对nodejs项目进行单元测试详解
Feb 28 NodeJs
NodeJS实现一个聊天室功能
Nov 25 NodeJs
Nodejs文件上传、监听上传进度的代码
Mar 27 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中处理mysql_fetch_assoc返回来的数组 不用foreach----echo
2011/05/04 PHP
Dwz与thinkphp整合下的数据导出到Excel实例
2014/12/04 PHP
php读取文件内容到数组的方法
2015/03/16 PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
2017/08/07 PHP
通过MSXML2自动获取QQ个人头像及在线情况(给初学者)
2007/01/22 Javascript
一个级联菜单代码学习及removeClass与addClass的应用
2013/01/24 Javascript
js实现网站首页图片滚动显示
2013/02/04 Javascript
jquery实现输入框动态增减的实例代码
2013/07/14 Javascript
Document:getElementsByName()使用方法及示例
2013/10/28 Javascript
JS 删除字符串最后一个字符的实现代码
2014/02/20 Javascript
js时间比较示例分享(日期比较)
2014/03/05 Javascript
jQuery Migrate 1.1.0 Released 注意事项
2014/06/14 Javascript
javascript仿京东导航左侧分类导航下拉菜单效果
2020/11/25 Javascript
jquery树形菜单效果的简单实例
2016/06/06 Javascript
JS之获取样式的简单实现方法(推荐)
2016/09/13 Javascript
AngularJS中filter的使用实例详解
2017/08/25 Javascript
vue cli 全面解析
2018/02/28 Javascript
js for终止循环 跳出多层循环
2018/10/04 Javascript
BootStrap模态框闪退问题实例代码详解
2018/12/10 Javascript
javascript验证form表单数据的案例详解
2019/03/25 Javascript
详解VUE调用本地json的使用方法
2019/05/15 Javascript
详解Vue3.0 前的 TypeScript 最佳入门实践
2019/06/18 Javascript
JavaScript switch语句使用方法简介
2019/12/30 Javascript
原生JavaScript实现刮刮乐
2020/09/29 Javascript
详解Python开发中如何使用Hook技巧
2017/11/01 Python
Python实现的将文件每一列写入列表功能示例【测试可用】
2018/03/19 Python
Python基于FTP模块实现ftp文件上传操作示例
2018/04/23 Python
tensorflow 获取变量&打印权值的实例讲解
2018/06/14 Python
mac下如何将python2.7改为python3
2018/07/13 Python
python实现文件助手中查看微信撤回消息
2019/04/29 Python
Python FtpLib模块应用操作详解
2019/12/12 Python
python GUI框架pyqt5 对图片进行流式布局的方法(瀑布流flowlayout)
2020/03/12 Python
保护环境建议书
2014/03/12 职场文书
2014年党建工作汇报材料
2014/11/02 职场文书
财政局长个人总结
2015/03/04 职场文书
详解Java线程池是如何重复利用空闲线程的
2021/06/26 Java/Android