详解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 相关文章推荐
iPhone手机上搭建nodejs服务器步骤方法
Jul 06 NodeJs
基于html5和nodejs相结合实现websocket即使通讯
Nov 19 NodeJs
nodejs初步体验篇
Nov 23 NodeJs
nodejs实现bigpipe异步加载页面方案
Jan 26 NodeJs
Nodejs学习item【入门手上】
May 05 NodeJs
详解nodejs与javascript中的aes加密
May 22 NodeJs
详解nodejs操作mongodb数据库封装DB类
Apr 10 NodeJs
nodejs之get/post请求的几种方式小结
Jul 26 NodeJs
详解使用vscode+es6写nodejs服务端调试配置
Sep 21 NodeJs
Nodejs 发布自己的npm包并制作成命令行工具的实例讲解
May 15 NodeJs
基于nodejs的雪碧图制作工具的示例代码
Nov 05 NodeJs
nodejs中request库使用HTTPS代理的方法
Apr 30 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实现上传图片保存到数据库的方法
2015/02/11 PHP
php实现支持中文的文件下载功能示例
2017/08/30 PHP
在laravel中使用with实现动态添加where条件
2019/10/10 PHP
jQuery使用手册之二 DOM操作
2007/03/24 Javascript
25个好玩的JavaScript小游戏分享
2011/04/22 Javascript
jQuery 选择器详解
2015/01/19 Javascript
JQuery实现简单的服务器轮询效果实例
2016/03/31 Javascript
DOM操作原生js 的bug,使用jQuery 可以消除的解决方法
2016/09/04 Javascript
jQuery仿写百度百科的目录树
2017/01/03 Javascript
JavaScript实现时钟滴答声效果
2017/01/29 Javascript
JavaScript用200行代码制作打飞机小游戏实例
2017/06/21 Javascript
js 判断一个数字是不是2的n次方幂的实例
2017/11/26 Javascript
VScode格式化ESlint方法(最全最好用方法)
2019/09/10 Javascript
js实现开关灯效果
2020/03/30 Javascript
JavaScript逻辑运算符相关总结
2020/09/04 Javascript
uniapp微信小程序实现一个页面多个倒计时
2020/11/01 Javascript
详解vue 组件注册
2020/11/20 Vue.js
[03:45]Newbee战队出征西雅图 决战2016国际邀请赛
2016/08/02 DOTA
python通过getopt模块如何获取执行的命令参数详解
2017/12/29 Python
python实现树形打印目录结构
2018/03/29 Python
python url 参数修改方法
2018/12/26 Python
解决安装pycharm后不能执行python脚本的问题
2019/01/19 Python
Python:合并两个numpy矩阵的实现
2019/12/02 Python
使用PyOpenGL绘制三维坐标系实例
2019/12/24 Python
详解python 破解网站反爬虫的两种简单方法
2020/02/09 Python
python mysql中in参数化说明
2020/06/05 Python
Python 整行读取文本方法并去掉readlines换行\n操作
2020/09/03 Python
Numpy数组的广播机制的实现
2020/11/03 Python
中专生职业生涯规划书范文
2013/12/29 职场文书
大学生党员自我批评
2014/02/14 职场文书
党员党性分析材料
2014/02/17 职场文书
工商管理本科生求职信
2014/07/13 职场文书
2014年社区妇联工作总结
2014/12/02 职场文书
承诺函格式模板
2015/01/21 职场文书
火锅店的开业营销方案范本!
2019/07/05 职场文书
Golang 空map和未初始化map的注意事项说明
2021/04/29 Golang