当前位置: 首页 > 后端技术 > Node.js

nodejshttp请求相关总结

时间:2023-04-03 16:26:42 Node.js

nodejshttp请求相关总结通过node提供的http模块,可以通过其提供的get()和request()方法发起http请求。get()是对request()方法的封装,方便发起get请求。如果要实现post请求,需要封装request()方法。request()方法letreq=http.request("http://www.baidu.com",(res)=>{console.log(res.statusCode);});req.end();//required调用end()方法结束请求。需要注意的是,当使用request()方法发起http请求时,request()方法会返回一个请求对象,必须调用返回的请求对象的end()方法来表明请求动作已经发生beencompleted,否则请求将被挂起,等待请求的动作完成。request()方法的参数问题:request()第一个参数可以直接是url地址,第二个参数是一个请求完成,收到服务器响应后的回调函数。回调函数只有一个参数,响应对象resletreq=http.request("http://www.baidu.com",(res)=>{console.log(res.statusCode);});req.end();//必须调用end()方法结束request()第一个参数可以是请求数据配置对象,第二个参数是请求完成服务器响应后的回调函数已收到。回调函数只有一个参数,响应对象resletreq=http.request({hostname:"www.baiduc.com",port:80},(res)=>{console.log(res.statusCode);});req.end();//结束请求必须调用end()方法需要注意的是request()方法不能同时传入url地址和请求数据配置对象,只能传一个两者可以选择,也就是说request()方法只能传两个参数get()方法letreq=http.get("http://www.baidu.com",(res)=>{console.log(res.statusCode);});当get()方法发起一个http请求时,get()方法也会返回一个request对象,但是并不需要通过这个request对象调用end()方法,这一点与request()方法不同。get()方法参数问题:get()方法和request()方法的参数是一样的,即不需要调用end()方法。设置请求超时的方法设置请求超时,可以通过get()或request()方法返回的请求对象的setTimeout()方法来实现。letreq=http.get("http://www.baidu.com",(res)=>{console.log(res.statusCode);});req.setTimeout(1,()=>{console.log(`请求超时`);req.abort();//终止请求});如果1毫秒后没有收到响应,会触发setTimeout的回调函数,此时可以直接终止请求。2、也可以自己设置定时器,如:letrequestTimer=null;letreq=http.get("http://www.baidu.com",(res)=>{console.log(res.statusCode);if(res.statusCode===200){clearTimeout(requestTimer);//超时前请求完成,清除超时定时器}});requestTimer=setTimeout(()=>{req.emit("timeout",{"msg":"请求超时"});//如果请求超时,发送超时事件},1000);req.on("timeout",(msg)=>{//监听超时事件并终止请求console.log(`receivedtimeoutevent!`);req.abort();console.log(`terminaterequest`);});获取响应数据get()和request()方法回调函数Res中的响应对象不携带响应数据。如果要获取响应数据,需要通过响应对象监听数据和结束事件来获取。letreq=http.get("http://www.baidu.com",(res)=>{letresStr="";res.on("data",(res)=>{resStr+=res;});res.on("结束",()=>{console.log(resStr);});});