對於前端同學來說,ajax 請求應該不會陌生。jquery 真的ajax請求做了封裝,可以通過下面的方式發送一個請求並獲取相應結果:
$.ajax({ url: "https://echo.apipost.cn/get.php", data: formData, type: "POST", processData: false, contentType: false, success: function (data, status, xhr) { console.log(data, status, xhr) }, error: function (xhr, status, error) { console.log(xhr, status, error) }, complete: function (xhr, status) { console.log(xhr, status) } })
但是,在 node 環境中,就需要一些其他庫實現接口發送,例如GOT、request 等。當然,也可以通過在node 中安裝 jquery 來使用上面 $.ajax 的方法,但是會有一個很要命的問題:跨域。
何爲跨域?
當一個請求url的協議、域名、端口三者之間任意一個與當前頁面url不同即爲跨域。也就是違反了“同源策略”:
同源策略是一個重要的安全策略,它用於限制一個origin的文檔或它加載的腳本如何能與另一個源的資源進行交互。能夠減少惡意文檔,減少可能被攻擊媒介。 如果兩個URL的協議、域名、端口號都相同,就稱這兩個URL同源。
瀏覽器默認兩個不同的源之間是可以互相訪問資源和操作DOM的。兩個不同的源之間若是想要訪問資源或者操作DOM,那麼會有一套基礎的安全策略的制約,我們把這稱爲同源策略。它的存在可以保護用戶隱私信息,防止身份僞造。
使用 ajax-for-node 實現 $.ajax
ajax-for-node (https://www.npmjs.com/package/ajax-for-node)是一個在 node 環境下實現 $.ajax 的庫,它的所有參數格式和 $.ajax 完全一致。
const nodeAjax = require('ajax-for-node'); var formData = new FormData(); formData.append("username", "Groucho"); formData.append("accountnum", 123456); nodeAjax({ url: "https://echo.apipost.cn/get.php", data: formData, type: "POST", processData: false, contentType: false, success: function (data, status, xhr) { console.log(data, status, xhr) }, error: function (xhr, status, error) { console.log(xhr, status, error) }, complete: function (xhr, status) { console.log(xhr, status) } });
github:https://github.com/Apipost-Team/nodeajax
npm :https://www.npmjs.com/package/ajax-for-node