對于前端同學來說,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://github.com/Apipost-Team/nodeajax)是一個在 node 環境下實現 .ajax的庫,它的所有參數格式和.ajax 的庫,它的所有參數格式和 .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)
}
});
npm 搜 ajax-for-node