前提:一次面試被問到了,axios有什么特點,對比一下ajax。答的很不滿意。
axios是一個基於Promise的http請求庫,可用於瀏覽器和 Node。可以說是目前最為常用的http庫,有必要了解一下其內部的實現原理。
同時支持瀏覽器端和服務端的請求。由於axios的這一特性,vue的服務端渲染對於axios簡直毫無抵抗力。 這很牛x啊!
下面選部分重要代碼分析。
function getDefaultAdapter() { var adapter; if (typeof XMLHttpRequest !== ‘undefined‘) { //通過判斷XMLHttpRequest是否存在,來判斷是否是瀏覽器環境 adapter = require(‘./adapters/xhr‘); } else if (typeof process !== ‘undefined‘) { //通過判斷process是否存在,來判斷是否是node環境 adapter = require(‘./adapters/http‘); } return adapter; }
到這里真相大白,這里通過 XMLHttpRequest 和 process 來判斷是瀏覽器環境還是node環境(學習了!), 從而在不同的環境提供不同的http請求模塊,實現客戶端和服務端程序的兼容。
同理,我們在做ssr服務端渲染時,也可以使用這個方法來判斷代碼當前的執行環境。
知識點:
XMLHttpRequest 是瀏覽器內置的一個對象,它為客戶端提供了在客戶端和服務器之間傳輸數據的功能。
process 對象是node內置的一個全局變量,提供有關信息,控制當前 Node.js 進程。