爲了在我的web應用程序中獲取Spotify API的訪問令牌(由他們的Web授權流程指定),我瞭解到我必須一個POST
請求。但是,當我這樣做時,由於交叉來源問題,我得到了XMLHttpRequest
500 Error
。允許cors jQuery POST請求到Express.js服務器上的Spotify API
我已經想出瞭如何允許CORS GET
請求,但不知道如何對POST
請求執行相同的操作。 This link提供了配置提示,但它將GET
和POST
的實際路線留爲空白。
這是我的Express.js服務器的相關代碼:
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
app.use(express.static(__dirname + '/public')); // looks in public directory, not root directory (protects files)
app.get('/', function(req, res) {
// res.header("Access-Control-Allow-Origin", "*");
// res.header("Access-Control-Allow-Headers", "X-Requested-With");
res.send(__dirname + '\\index.html')
});
app.post('/', function(req, res) {
res.send(req.body.spotify);
});
(spotify
是spotify-web-api-js
節點模塊)。
我以前曾嘗試將app.get
的確切代碼複製到app.post
,但這導致服務器崩潰。
這是在我的程序的JavaScript文件代碼,打算髮送上一個按鈕,將他們帶到Spotify的授權路徑的開始,並在用戶點擊後POST
請求位覈准登錄:
$('#spotify').on('click', function() {
$.support.cors = true;
$.post("https://accounts.spotify.com/api/token");
});
(在這種情況下,spotify
是在HTML文件中的按鈕的ID)
我應該怎麼做才能繞過CORS問題在這種情況下?我被困了幾天。
您的服務器無法代表他們向Spotify的API授予訪問權限(通過CORS或其他方式)。他們的應用程序必須自己響應必要的標題以允許請求。如果沒有,請求可能根本無法從客戶端獲得。備註:在Node HTTP應用程序中有用於啓用CORS的現有軟件包,包括['cors'](https://www.npmjs.com/package/cors)。此外,除了最基本的請求外,其他所有請求都可以發送[預檢'OPTIONS'](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests)請求。 。 –
我已經安裝了'cors'軟件包,但是我找不到'POST'請求的任何配置設置。發送歌曲/藝術家數據的GET請求時,我可以解決CORS訪問問題。這是根據他們的開發網站Spotify的Web認證流程的一部分,這裏的一位員工說應該使用'POST',所以它應該是技術性的可能... –
通過這樣做客戶端,你涉及[相同來源政策](https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy)在HTTP之上,創造了CORS的要求。 Spotify可以選擇是否在單個路徑上啓用CORS,看起來,他們選擇不爲'/ api/token'。所以,實現它的方式很可能是:不要試圖用Ajax嚴格執行客戶端。使用['http.request()'](https:// nodejs。org/api/http.html#http_http_request_options_callback)來實現請求。 –