2015-05-13 62 views
3

到現在爲止,我一直使用普通的老XMLHttpRequest的GET請求,例如,NPM要求對XMLHttpRequest進行簡單的GET請求

var xhr = new XMLHttpRequest(); 
xhr.open('GET', url, true); 
xhr.onload = function() { 
    if (this.status === 200) { 
    // do something 
    } else { 
    // do something else 
    } 
}; 
xhr.send(null); 

我現在碰到request並認爲這是非常流行的。它相當於

var request = require('request'); 
request(url, function (error, response, body) { 
    if (!error && response.statusCode === 200) { 
    // do something 
    } else { 
    // do something else 
    } 
}) 

稍微短了一點,我想知道是否還有其他更多的好處。錯誤處理可能?

+0

這兩個不在不同的地方跑?他們怎麼可以互換? – dandavis

+0

您是在編寫服務器端代碼還是客戶端代碼? – SLaks

+0

@SLaks這個特別的是用於瀏覽器擴展,所以我把它算作前端。這是如何改變的? –

回答

4

在瀏覽器中,已經內置了XMLHttpRequest,所以如果該庫爲您提供了一些您認爲有用並且值得額外下載的特定功能,那麼您應該只獲得一些構建於其上的其他庫。爲了保持網頁儘可能的精益,如果你有內置的東西,那麼我就不會只是加載新的模塊。所以,如果瀏覽和請求模塊是值得的,那純粹是對你自己的判斷。請求模塊是一個很好的精簡而靈活的接口,因此它具有這種功能。

在node.js上,並不是實際的內置對象XMLHttpRequest,因此提供該接口的任何東西都會採用類似http模塊的模塊,然後在其上構建新的接口。 request模塊也是在http模塊上構建的,但它的使用方式非常輕巧和簡單(我的觀點)。所以,在三種選擇中:1)使用http模塊編寫自己的代碼,2)將XMLHttpRequest模塊和代碼加載到該接口或3)加載請求模塊和代碼,您可以形成自己的意見,瞭解什麼是最乾淨的和最簡單的編碼方式。在服務器端加載新模塊的問題較少(因爲它們通常只在啓動時從本地硬盤加載一次)。我個人發現request()模塊非常簡單,功能非常強大,所以這就是我用來製作服務器端http請求的方法。 XMLHttpRequest對象在瀏覽器中從來沒有像一個好的接口,所以我沒有興趣在服務器端使用它。在request()模塊的

一個優點是,它遵循Node.js的異步回調慣例,這意味着你可以很容易與承諾(一個調用像模塊上的藍鳥.promisifyAll()將讓你promisified的版本中使用該整個界面),很多(包括我自己)對於管理異步響應非常有用。 XMLHttpRequest對象沒有遵循這樣的約定,所以必須在它周圍放置一個包裝器,以便在承諾中清楚地使用它(在客戶端,jQuery.ajax()XMLHttpRequest的這種包裝器的示例)。

如果有人在客戶端和服務器上查找完全相同的接口,我可能會使用request()模塊,因爲它比XMLHttpRequest接口(我個人認爲)更清潔。