详解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 相关文章推荐
golang、python、php、c++、c、java、Nodejs性能对比
Mar 12 NodeJs
轻松创建nodejs服务器(7):阻塞操作的实现
Dec 18 NodeJs
用NodeJS实现批量查询地理位置的经纬度接口
Aug 16 NodeJs
nodejs进阶(6)—连接MySQL数据库示例
Jan 07 NodeJs
nodejs中使用HTTP分块响应和定时器示例代码
Mar 19 NodeJs
用Nodejs搭建服务器访问html、css、JS等静态资源文件
Apr 28 NodeJs
nodejs6下使用koa2框架实例
May 18 NodeJs
Nodejs调用WebService的示例代码
Sep 29 NodeJs
nodejs实现的简单web服务器功能示例
Mar 15 NodeJs
详解Nodejs mongoose
Jun 10 NodeJs
nodejs读取图片返回给浏览器显示
Jul 25 NodeJs
nodejs中的异步编程知识点详解
Jan 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
Banner程序
2006/10/09 PHP
php自动注册登录验证机制实现代码
2011/12/20 PHP
解析yii数据库的增删查改
2013/06/20 PHP
PHP小教程之实现链表
2014/06/09 PHP
完美解决thinkphp验证码出错无法显示的方法
2014/12/09 PHP
js 获取计算后的样式写法及注意事项
2013/02/25 Javascript
不用锚点也可以平滑滚动到页面的指定位置实现代码
2013/05/08 Javascript
div+css+js实现无缝滚动类似marquee无缝滚动兼容firefox
2013/08/29 Javascript
js 绑定键盘鼠标事件示例代码
2014/02/12 Javascript
创建js对象和js类的方法汇总
2014/12/24 Javascript
jquery中checkbox使用方法简单实例演示
2015/11/24 Javascript
jquery获取css的color值返回RGB的方法
2015/12/18 Javascript
浅谈js中的变量名和函数名重名
2017/02/13 Javascript
vue-resource 拦截器使用详解
2017/02/21 Javascript
ng2学习笔记之bootstrap中的component使用教程
2017/03/09 Javascript
利用jQuery解析获取JSON数据
2017/04/08 jQuery
超级简易的JS计算器实例讲解(实现加减乘除)
2017/08/08 Javascript
vue中监听返回键问题
2019/08/28 Javascript
element-ui table行点击获取行索引(index)并利用索引更换行顺序
2020/02/27 Javascript
vue动态渲染svg、添加点击事件的实现
2020/03/13 Javascript
[44:50]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第二局
2016/02/26 DOTA
python连接远程ftp服务器并列出目录下文件的方法
2015/04/01 Python
详解Python利用random生成一个列表内的随机数
2019/08/21 Python
python GUI库图形界面开发之PyQt5滑块条控件QSlider详细使用方法与实例
2020/02/28 Python
Python + selenium + crontab实现每日定时自动打卡功能
2020/03/31 Python
基于python实现把json数据转换成Excel表格
2020/05/07 Python
一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
2020/07/03 Python
PyCharm 2020.2.2 x64 下载并安装的详细教程
2020/10/15 Python
CSS3 渐变(Gradients)之CSS3 径向渐变
2016/07/08 HTML / CSS
ALDO加拿大官网:加拿大女鞋品牌
2018/12/22 全球购物
大学生自荐信
2013/12/11 职场文书
幼儿教师求职信
2014/05/24 职场文书
社会治安综合治理责任书
2015/01/29 职场文书
大学生个人学习总结
2015/02/15 职场文书
党支部评议意见
2015/06/02 职场文书
大学生党课感想
2015/08/11 职场文书