簡介
因為 angular 專案使用 nodeJS 建立開發環境,
不論將來是否打算將開發後的檔案與後端程式合併,
都會遇到瀏覽器阻擋跨域請求的問題。
當然方法之一是寫後端程式開放 Access-Control-Allow-Origin
另一個方法則是用 proxy 方式,讓 nodejs 幫您的 angular 代理 http request,
以避免跨域被擋的問題發生。
不論將來是否打算將開發後的檔案與後端程式合併,
都會遇到瀏覽器阻擋跨域請求的問題。
當然方法之一是寫後端程式開放 Access-Control-Allow-Origin
另一個方法則是用 proxy 方式,讓 nodejs 幫您的 angular 代理 http request,
以避免跨域被擋的問題發生。
1.更改 package.json
更改 package.json 檔案 "script" 結構下的 "start" 
    start": "ng serve --proxy-config proxy.config.json",
2.新增 proxy.config.json
- 在專案資料夾底下新增 proxy.config.json 檔案。
- http://127.0.0.1:2020 為自己本基架設的 API Server(後端)
- http://localhost:4200 為 angular 專案預設 port (前端)
- 以下設定表示 angular 程式只要向 http://localhost:4200/apiServer 發送 http request,會經 nodejs 向http://127.0.0.1:2020 發送 request
- 如此便能解決瀏覽器阻擋的跨域請求問題
    {
         "/apiServer/*": { 
          "target": "http://127.0.0.1:2020",
          "secure": false,
          "changeOrigin": true,
          "pathRewrite": {
            "^/apiServer": ""
          }
        },
    }
3.啟動方式
請注意如果要使用 proxy,啟動方式就不再是 ng serve ,而要用 npm start 取代。
  npm start
4.HTTP Reauest
以下為發送請求範例片段程式。
如下所示,向自家 server http://127.0.0.1:4200/apiServer/apitest2 請求, nodejs 伺服器會代為發 proxy 向 http://127.0.0.1:2020/apitest2 做 http request
如下所示,向自家 server http://127.0.0.1:4200/apiServer/apitest2 請求, nodejs 伺服器會代為發 proxy 向 http://127.0.0.1:2020/apitest2 做 http request
    ngOnInit(){
        let headers = new HttpHeaders({
          "Content-Type":"application/json",
        });
        this.http.post('apiServer/apitest2',{headers: headers}).subscribe(
          (val) => {
            debugger
          },
          response => {},
          () => {});
      }
5.範例程式下載
  範例程式 : proxy 
尚未準備完成,之後補上 XD
尚未準備完成,之後補上 XD


 
沒有留言:
張貼留言