node+express+vue專案部署到伺服器,Nginx設定跨域
阿新 • • 發佈:2020-10-13
要一個人寫前臺和後臺就是一把辛酸淚,跨域弄得我頭大,寫了一個node+express+vue的前後臺分離專案,部署到伺服器出現跨域問題,找了好多資料,終於解決這個心頭大患了,哈哈哈哈哈
一、打包前端及放到伺服器上面
我的前端是用Vue寫的,然後打包,把專案放到tomcat/webapps/ROOT/資料夾下面,我新建了一個資料夾來存放node寫的後臺程式碼,如下圖express存放的就是我的node程式碼
二、啟動後臺,前臺訪問
然後我啟動node,訪問前端IP時出現了跨域的問題,如下圖
原因:
1.前端發出的請求附帶身份驗證(withCredentials: true),意思是是否支援傳送cookie憑證資訊的欄位,而後端的Access-Control-Allow-Origin
結果報了以下圖的錯誤,大概意思說
在預請求的時候失敗了,當請求證書的模式為‘include’時,Access-Control-Allow-Origin不能為‘*’,這個證書模式初始化是通過ajax的widthCredentials屬性控制的
找了好久的資料,終於解決了,請看我緩緩道來~
解決方法:
1. 方法一
前端請求頭的withCredentials設定為false
後端Access-Control-Allow-Origin可以設定為‘*’,不用進行身份過濾
2. 方法二
前臺的withCredentials:true或者後臺的Access-Control-Allow-Credentials設定為字串true時,Access-Control-Allow-Origin不可以設定為‘*’,要設定為我請求的域名即可
即在node專案的app.js檔案加入以下程式碼,就成功解決了跨域的問題
app.all('*',function(req,res,next){ res.header("Access-Control-Allow-Credentials", 'true'); res.header("Access-Control-Allow-Origin", req.headers.origin); res.header('Access-Control-Allow-Headers', 'Content-type, usernme, token'); res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS,PATCH"); res.header("X-Powered-By", ' 3.2.1') console.log(res.header().method,'res-----------------------------') //res.send(res.header()) // res.header("Content-Type", "application/json;charset=utf-8"); next(); })