详解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 11 NodeJs
Nodejs极简入门教程(一):模块机制
Oct 25 NodeJs
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
Dec 30 NodeJs
Nodejs实现多房间简易聊天室功能
Jun 20 NodeJs
用nodejs实现json和jsonp服务的方法
Aug 25 NodeJs
详解NODEJS的http实现
Jan 04 NodeJs
NodeJS父进程与子进程资源共享原理与实现方法
Mar 16 NodeJs
nodejs 如何手动实现服务器
Aug 20 NodeJs
nodejs读取本地中文json文件出现乱码解决方法
Oct 10 NodeJs
nodejs实现聊天机器人功能
Sep 19 NodeJs
NodeJS和浏览器中this关键字的不同之处
Mar 03 NodeJs
分享node.js实现简单登录注册的具体代码
Apr 26 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加密扩展库Mcrypt安装和实例
2013/11/10 PHP
php nginx 实时输出的简单实现方法
2018/01/21 PHP
浅谈javascript中的作用域
2012/04/07 Javascript
jQuery实现简易的天天爱消除小游戏
2015/10/16 Javascript
详解jQuery向动态生成的内容添加事件响应jQuery live()方法
2015/11/02 Javascript
JS动态增删表格行的方法
2016/03/03 Javascript
window.onload绑定多个事件的两种解决方案
2016/05/15 Javascript
JS实现环形进度条(从0到100%)效果
2016/07/05 Javascript
微信小程序实战之运维小项目
2017/01/17 Javascript
微信小程序 Buffer缓冲区的详解
2017/07/06 Javascript
javascript计算对象长度的方法
2017/10/25 Javascript
微信小程序实现笑脸评分功能
2018/11/03 Javascript
小白教程|一小时上手最流行的前端框架vue(推荐)
2019/04/10 Javascript
JS学习笔记之闭包小案例分析
2019/05/29 Javascript
Vue封装的组件全局注册并引用
2019/07/24 Javascript
layer.open 获取不到表单信息的解决方法
2019/09/26 Javascript
jQuery模仿ToDoList实现简单的待办事项列表
2019/12/30 jQuery
vue中改变滚动条样式的方法
2020/03/03 Javascript
在vue中使用jsonp进行跨域请求接口操作
2020/10/29 Javascript
python使用分治法实现求解最大值的方法
2015/05/12 Python
常用python编程模板汇总
2016/02/12 Python
Python实现将sqlite数据库导出转成Excel(xls)表的方法
2017/07/17 Python
python+numpy+matplotalib实现梯度下降法
2018/08/31 Python
Python3 SSH远程连接服务器的方法示例
2018/12/29 Python
Python编程学习之如何判断3个数的大小
2019/08/07 Python
python kafka 多线程消费者&手动提交实例
2019/12/21 Python
使用豆瓣源来安装python中的第三方库方法
2021/01/26 Python
使用before和:after伪类制作css3圆形按钮
2014/04/08 HTML / CSS
Html5实现用户注册自动校验功能实例代码
2016/05/24 HTML / CSS
销售主管岗位职责
2014/02/08 职场文书
联欢晚会主持词
2014/03/25 职场文书
服装设计专业毕业生求职信
2014/04/09 职场文书
服装设计师求职信
2014/06/04 职场文书
路政管理求职信
2014/06/18 职场文书
致百米运动员广播稿5篇
2014/10/13 职场文书
Python基础之变量的相关知识总结
2021/06/23 Python