首頁  >  文章  >  web前端  >  nodejs http請求相關的總結介紹

nodejs http請求相關的總結介紹

不言
不言轉載
2019-04-01 11:50:571797瀏覽

這篇文章帶給大家的內容是關於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()方法。

設定請求逾時的方法

要設定請求逾時,可以透過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);
    });
});

【相關推薦:node.js影片教學

#

以上是nodejs http請求相關的總結介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除