2017-04-05 77 views
0

我正在處理一個反應應用程序。我使用模塊http-proxy-middleware配置了代理。爲什麼當我打電話給代理服務器api時,網址url是追加的

在標誌頁面,網站url看起來像// localhost:9000/flags/all。

當用戶點擊旗幟網頁上的按鈕,我需要調用閃耀(REST服務)API和應該加載結果。當我打電話給sparkle api時,內部網站的url也被追加,並且api調用形成爲http://SGD01D:10700/all/sparkle/flags而不是// SGD01D:10700/sparkle/flags。爲什麼「全部」會添加到api調用中?如何解決這個問題

//server 
app.use('/sparkle', proxy(proxies.sparkle_config())); 

//Proxy config 
class proxies { 
    static sparkle_config() { 
return { 
    target: 'http://SGD01D:10700', // target host 
    changeOrigin: true // needed for virtual hosted sites 
    }; 
} 
} 
export default proxies; 

    //React action 
    //redux-thunk 
    export function loadFlags() { 
     return function(dispatch) { 
     dispatch(beginAjaxCall()); 

     const promise = axios({url: 'sparkle/v1/api/flag', timeout: 20000, method: 'get', responseType: 'json'}); 
     promise.then(function(flags) {    
      dispatch(loadFlagsSuccess(flags)); 
     }).catch(function(error) { 
      throw(error); 
     }); 

     }; 
    } 
+0

在flags頁面'//本地主機:9000 /標記/ all',Ajax請求到'爍/ V1/API/flag'將導致請求到'// localhost:9000/flags/sparkle/v1/api/flag',它不會碰到'app.use('/ sparkle',...)'。你能打開瀏覽器DevTool來確認嗎? – shaochuancs

+0

另外,對'sparkle/v1/api/flag'的請求將被代理爲'.../v1/api/flag'。這不太可能被代理到'sparkle/flags'。你的代碼中是否有缺失? – shaochuancs

+0

感謝您的回覆。我的觀察如下,請檢查一次。網址= http:// localhost:9000/flag/all, API調用='sparkle/v1/api/flag', 開發工具url = http:// localhost:9000/flag/sparkle/v1/API /標記(404結果), 應該是= HTTP://本地主機:9000 /閃光/ V1/API /標誌, 一個多觀察: 如果我的網站網址,如http:// localhost:9000/flag/all/testing, 然後開發工具url = http:// localhost:9000/flag/sparkle/all/v1/api/flag(結果爲404) – Abhi

回答

0

它看起來像一個問題,因爲你的API調用中的相對路徑。我會打電話與愛可信的API以絕對路徑:

const promise = axios({url: '/sparkle/v1/api/flag', timeout: 20000, method: 'get', responseType: 'json'}); 
相關問題