今天給你們分享一篇關於詳解nodejshttp請求相關總結,首先經過node提供的http模塊,能夠經過其提供的get()和request()兩個方法發起http請求,get()是對request()方法的封裝,方便發起get請求,若是要實現post請求,那麼須要對request()方法進行封裝。 request()方法node
let req = http.request("www.codingke.com", (res) =>{服務器
console.log(res.statusCode);函數
});post
req.end();//必須調用end()方法結束請求url
須要注意的是,使用request()方法發起http請求的時候,request()方法會返回一個請求對象,必須調用返回的請求對象的end()方法,表示請求動做已經完成,不然請求將會一直掛起,等待請求動做的完成。code
request()方法參數問題:對象
request()的第一個參數能夠直接是一個url地址,第二個參數爲一個請求完成收到服務器響應後的回調函數,回調函數的參數只有一個即響應對象res事件
let req = http.request("www.codingke.com", (res) =>{get
console.log(res.statusCode);回調函數
});
req.end();//必須調用end()方法結束請求
request()的第一個參數能夠是一個請求數據配置對象,第二個參數爲一個請求完成收到服務器響應後的回調函數,回調函數的參數只有一個即響應對象res
let req = http.request(, (res) =>{
console.log(res.statusCode);
});
req.end();//必須調用end()方法結束請求
須要注意的是,request()方法不能同時傳遞url地址和請求數據配置對象,只能兩者選一個,也就是說request()方法只能傳遞兩個參數
get()方法
let req = http.get("www.codingke.com", (res) =>{
console.log(res.statusCode);
});
get()方法發起http請求的時候,get()方法也會返回一個請求對象,可是不用經過這個請求對象去調用end()方法,這一點和request()方法不一樣。
get()方法參數問題:
get()方法和request()方法的參數是同樣的,就是不須要調用end()方法。
設置請求超時的方法
1.要設置請求超時,能夠經過get()或者request()方法返回的請求對象setTimeout()方法來實現。
let req = http.get("www.codingke.com", (res) =>{
console.log(res.statusCode);
});
req.setTimeout(1,()=>{
console.log(請求超時了
);
req.abort();//終止請求
});
1毫秒以後若是還沒收到響應,那麼就會觸發setTimeout的回調函數,此時能夠直接終止請求。
2.也能夠本身設立一個定時器來實現,如:
let requestTimer = null;
let req = http.get("www.codingke.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("www.codingke.com", (res) =>{
let resStr = "";
res.on("data", (res) => {
resStr += res;
});
res.on("end", () => {
console.log(resStr);
});
});
更多精彩請點擊主頁