详解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 模块开发及发布详解分享
Mar 07 NodeJs
nodejs入门详解(多篇文章结合)
Mar 07 NodeJs
nodejs实现黑名单中间件设计
Jun 17 NodeJs
nodejs批量修改文件编码格式
Jan 22 NodeJs
nodejs中实现阻塞实例
Mar 24 NodeJs
Nodejs学习笔记之入门篇
Apr 16 NodeJs
NodeJS基础API搭建服务器详细过程记录
Apr 01 NodeJs
nodejs body-parser 解析post数据实例
Jul 26 NodeJs
详解nodeJs文件系统(fs)与流(stream)
Jan 24 NodeJs
nodejs+mongodb aggregate级联查询操作示例
Mar 17 NodeJs
详解webpack打包nodejs项目(前端代码)
Sep 19 NodeJs
Nodejs在局域网配置https访问的实现方法
Oct 17 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初学者们头痛的十四个问题
2007/01/15 PHP
php 目录与文件处理-郑阿奇(续)
2011/07/04 PHP
thinkphp模板用法和内容输出实例
2014/11/28 PHP
php使用ftp实现文件上传与下载功能
2017/07/21 PHP
jquery 经典动画菜单效果代码
2010/01/26 Javascript
js null,undefined,字符串小结
2010/08/21 Javascript
javascript基础知识大全 便于大家学习,也便于我自己查看
2012/08/17 Javascript
JS获取页面input控件中所有text控件并追加样式属性
2013/02/25 Javascript
简单实用jquery版三级联动select示例
2013/07/04 Javascript
jQuery中trigger()方法用法实例
2015/01/19 Javascript
原生js实现模拟滚动条
2015/06/15 Javascript
AngularJS 中的指令实践开发指南(一)
2016/03/20 Javascript
jQuery常见的选择器及用法介绍
2016/12/20 Javascript
jquery Ajax 全局调用封装实例详解
2017/01/16 Javascript
微信小程序实战之自定义抽屉菜单(7)
2017/04/18 Javascript
vue中使用iview自定义验证关键词输入框问题及解决方法
2018/03/26 Javascript
微信小程序错误this.setData报错及解决过程
2019/09/18 Javascript
vue使用canvas实现移动端手写签名
2020/09/22 Javascript
JavaScript实现网页计算器功能
2020/10/29 Javascript
js异步接口并发数量控制的方法示例
2020/11/22 Javascript
在Django的通用视图中处理Context的方法
2015/07/21 Python
Python使用folium excel绘制point
2019/01/03 Python
Python3+Requests+Excel完整接口自动化测试框架的实现
2019/10/11 Python
Anaconda 查看、创建、管理和使用python环境的方法
2019/12/03 Python
python安装读取grib库总结(推荐)
2020/06/24 Python
基于python实现监听Rabbitmq系统日志代码示例
2020/11/28 Python
python 对xml解析的示例
2021/02/27 Python
英国时尚饰品和发饰购物网站:Claire’s
2017/07/04 全球购物
高三高考决心书
2014/03/11 职场文书
大学生就业策划书范文
2014/04/04 职场文书
2014年销售内勤工作总结
2014/12/01 职场文书
骨干教师考核评语
2014/12/31 职场文书
家装电话营销开场白
2015/05/29 职场文书
CSS 实现Chrome标签栏的技巧
2021/08/04 HTML / CSS
基于Pygame实现简单的贪吃蛇游戏
2021/12/06 Python
Go语言特点及基本数据类型使用详解
2022/03/21 Golang