react+express實現跨域


1. 首先復習一下跨域的幾種主要方式:

a. jsonp

b. cors

c. 代理服務(開發環境下常用)

2. 代理服務器:可實現轉發請求。即瀏覽器在3000端口發出請求,通過代理轉發,將請求發送給5000端口的服務;5000端口的服務處理后,將響應返回為3000端口。

create-react-app腳手架的開發環境自帶代理服務器,只需手動配置以下代理轉發的地址端口。在package.json文件中添加:

  "proxy": "http://localhost:5000"

express的配置這里不再重復。

重啟服務,ok.

2. express post()獲取客戶端傳來的參數

參考:https://blog.csdn.net/HansExploration/article/details/80683448

app.js

+    var bodyParser = require('body-parser');
// ......
+    app.use(bodyParser.urlencoded({extended: true}));

在用到post方法的文件中,通過request.body獲取請求數據。如:/routes/login.js

router.post('/', bodyParser.json(), function(req, res, next) {
  if (req.body.username === '1234' && req.body.password === '1234' ) {
  // ......
  }
}

 ------------------------------------------------------------------------------------------------------------------------------------------------------------------

下面說一下,生產環境下的無跨域情況(前端和后端部署在一個服務器上)

1. 前端運行 npm run build, 生成build文件夾,復制該文件夾下的內容;

2. 后端:清空public文件夾下的內容,將復制的build文件夾下的內容粘貼於public文件夾下; 

3. 啟動后台, 瀏覽器打開相應的url。

=============================================================================================

生產環境實現跨域請求的方法: nginx反向代理

1. 為了區分前后端地址,給所有后台請求地址加上BASE="/api"

前端:

 

 后台:

 

 2. 前端代碼npm run build

3. 更改nginx配置文件nginx.conf(最關鍵的一步!!!)

server {
# 端口號可以自己設定,不一定是80 listen
80; server_name localhost; # 代理所有以/開頭(除了下面的以/api開頭外)請求,轉發給3000端口 location / { proxy_pass http://localhost:3000; }   # 代理所有以 /api 開頭的請求,轉發給5001端口   location ~ /api {   proxy_pass http://localhost:5001;   } }

4. 啟動nginx. (在任務管理器中,可以看到啟動的nginx進程)

 

 5. 在瀏覽器中,輸入localhost:80. nginx轉發到3000端口上獲取前端的內容,返回給前台進行顯示;當點擊按鈕,涉及后端請求了,匹配到了/api,轉發給5001端口,從后台獲取響應,前台獲得數據后進行重新渲染。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM