環境:nodeJs項目用thinkjs框架寫的,前端ajax請求。
問題:前端ajax跨域請求nodeJs項目,瀏覽器報錯。顯示OPTIONS預請求到後端,因爲後端沒有處理OPTIONS請求,所以報500錯誤。後面緊跟着真正請求(post/get等)瀏覽器控制檯報跨域的錯誤。報錯信息如下圖
解決方法: 請求頭設置Access-Control-Allow-Origin:“*”。具體代碼:base.js
module.exports = class extends think.Controller {
async __before() {
//配置跨域
this.header("Access-Control-Allow-Origin", this.header("origin") || "*");
//允許請求頭參數進入
this.header("Access-Control-Allow-Headers", "x-requested-with");
//處理預請求,給body設置一個值,否則會包404
if(this.method === "OPTIONS"){
this.ctx.body = 200;
return false;
}
}
};
注意:如果前端請求頭裏面設置了field,這裏也要設置"Access-Control-Allow-Headers", "x-requested-with" 。其中x-requested-with 是前端請求頭設置的field。