2017-12-29 44 views
0

API를 호출하려고하는데 "처리되지 않은 약속 거부 : 오류 : 요청이 상태 코드 500으로 실패했습니다."오류가 발생합니다. 어떻게 오류가 발생했는지 몰라. API 호출을 componentDidMount에 넣었습니다. 오류가 redux 구현에서 왔는지 또는 내가 API를 어떻게 호출했는지 확신 할 수 없습니다.처리되지 않은 약속 거부 : 오류 : 상태 코드 500으로 요청이 실패했습니다.

이것은 내가 api를 호출 한 방법입니다. 로그인에 성공하면 사용자 이름을 토큰으로 사용하고 다른 API를 호출하는 데 사용합니다. 내 감속기를 작성하는 방법이있다

export const getSemcode = (username) => async dispatch => { 

    let param = { 
     nomatrik: username, 
    } 

    console.log(`${helper.ROOT_URL}/result/GetListOfKodSesiSem`) 
    let code_res = await 
    axios.post(`${helper.ROOT_URL}/result/GetListOfKodSesiSem`, param) 
    console.log(code_res.data);  
    if (code_res.data.length > 0) { 
     const { code } = code_res.data;   
     dispatch({ type: SEMCODE_FETCH_SUCCESS, payload: { semCode: code }}); 
    } 

} 

:

state={ 
    username: '', 
    semcode: [ 
     {} 
    ] 
} 

componentWillMount() { 
    AsyncStorage.getItem('Login_token').then((token) => { 
     console.log('this is coursescreen',token); 
     let Login_token = token; 
     this.setState({ username: Login_token }); 

    }); 

} 

componentDidMount(){ 
    this.props.getSemcode(this.state.username); 
} 
componentWillReceiveProps(nextProps) { 
    console.log('xx',nextProps); 
    if (nextProps.semCode != undefined) { 
     this.setState({ semcode: nextProps.semCode }); 

    } 
} 

내가 내 활동 파일을 작성하는 방법이다

import { SEMCODE_FETCH_SUCCESS} from '../actions/types'; 

const INITIAL_STATE={ 
semCode:[], 
} 
export default function (state=INITIAL_STATE, action){ 
switch(action.type){ 
    case SEMCODE_FETCH_SUCCESS: 
     return action.payload 
    default: 
     return state; 
} 
} 
사람이 pleaseeeeee

오류 메시지를 도와 줄 수

Error received from axios.post: {"config":{"transformRequest": {},"transformResponse":{},"timeout":0,"xsrfCookieName":"XSRF- TOKEN","xsrfHeaderName":"X-XSRF-TOKEN","maxContentLength":-1,"headers": {"Accept":"application/json, text/plain, /","Content- Type":"application/json;charset=utf-8"}, "method":"post","nomatrik":"BB16160907", "url":" https://smp.ums.edu.my/api/result/GetListOfKodSesiSem ","data":" {\"Accept\":\"application/json\",\"Content- Type\":\"application/json\"}"},"request": {"UNSENT":0,"OPENED":1,"HEADERS_RECEIVED":2,"LOADING":3,"DONE":4, "readyState":4,"status":500,"timeout":0,"withCredentials":true,"upload": {},"_aborted":false,"_hasError":false,"_method":"POST","_response":" {\"Message\":\"An error has occurred.\"}", "_url":" https://smp.ums.edu.my/api/result/GetListOfKodSesiSem ", "_timedOut":false,"_trackingName":"unknown", "_incrementalEvents":false,"responseHeaders":{"Date":"Sat, 30 Dec 2017 03:58:25 GMT","Content-Length":"36","X-Powered-By":"ARR/3.0","X-AspNet- Version":"4.0.30319","Expires":"-1","Content-Type":"application/json; charset=utf-8","Server":"Microsoft-IIS/10.0","Pragma":"no-cache","Cache- Control":"no-cache"},"_requestId":null,"_headers": {"accept":"application/json, text/plain, /","content- type":"application/json;charset=utf- 8"},"_responseType":"","_sent":true,"_lowerCaseResponseHeaders":{"date":"Sat, 30 Dec 2017 03:58:25 GMT","content-length":"36","x-powered-by":"ARR/3.0","x- aspnet-version":"4.0.30319","expires":"-1","content-type":"application/json; charset=utf-8","server":"Microsoft-IIS/10.0","pragma":"no-cache","cache- control":"no-cache"},"_subscriptions":[],"responseURL": " https://smp.ums.edu.my/api/result/GetListOfKodSesiSem "},"response":{"data": {"Message":"An error has occurred."},"status":500,"headers":{"date":"Sat, 30 Dec 2017 03:58:25 GMT","content-length":"36","x-powered-by":"ARR/3.0","x- aspnet-version":"4.0.30319","expires":"-1","content-type":"application/json; charset=utf-8","server":"Microsoft-IIS/10.0","pragma":"no-cache","cache- control":"no-cache"},"config":{"transformRequest":{},"transformResponse": {},"timeout":0,"xsrfCookieName":"XSRF-TOKEN","xsrfHeaderName":"X-XSRF- TOKEN","maxContentLength":-1,"headers":{"Accept":"application/json, text/plain, /","Content-Type":"application/json;charset=utf-8"},"method": "post","nomatrik":"BB16160907", "url":" https://smp.ums.edu.my/api/result/GetListOfKodSesiSem ","data":" {\"Accept\":\"application/json\",\"Content- Type\":\"application/json\"}"},"request": {"UNSENT":0,"OPENED":1,"HEADERS_RECEIVED":2,"LOADING":3,"DONE":4, "readyState":4,"status":500,"timeout":0,"withCredentials":true,"upload": {},"_aborted":false,"_hasError":false,"_method":"POST","_response":" {\"Message\":\"An error has occurred.\"}", "_url":" https://smp.ums.edu.my/api/result/GetListOfKodSesiSem ", "_timedOut":false,"_trackingName":"unknown","_incrementalEvents":false, "responseHeaders":{"Date":"Sat, 30 Dec 2017 03:58:25 GMT","Content- Length":"36","X-Powered-By":"ARR/3.0","X-AspNet- Version":"4.0.30319","Expires":"-1","Content-Type":"application/json; charset=utf-8","Server":"Microsoft-IIS/10.0","Pragma":"no-cache","Cache- Control":"no-cache"},"_requestId":null,"_headers": {"accept":"application/json, text/plain, /","content- type":"application/json;charset=utf- 8"},"_responseType":"","_sent":true,"_lowerCaseResponseHeaders":{"date":"Sat, 30 Dec 2017 03:58:25 GMT","content-length":"36","x-powered-by":"ARR/3.0","x- aspnet-version":"4.0.30319","expires":"-1","content-type":"application/json; charset=utf-8","server":"Microsoft-IIS/10.0","pragma":"no-cache","cache- control":"no-cache"},"_subscriptions": [],"responseURL":" https://smp.ums.edu.my/api/result/GetListOfKodSesiSem "}}}

로그인 조치 :

export const attemptLogin = (username, password) => async dispatch => { 

let param = { 
    txtNomatrik: username, 
    txtPwd: password, 
    public_key: helper.PUBLIC_KEY, 
    secret_key: helper.SECRET_KEY 

} 

console.log(`${helper.ROOT_API_URL}/v1/basic/ad/std/login`) 
let login_res = await 
axios.post(`${helper.ROOT_API_URL}/v1/basic/ad/std/login`, param) 

console.log(login_res.data); 
await AsyncStorage.setItem('jwtToken',login_res.data.token); 
if (login_res.data.status == 'Successful login') { 
    const { login } = login_res.data;  
    dispatch({ type: LOGIN_SUCCESS}); 
} 
} 
+0

안녕하세요 gdphy 님이 우편 배달부를 다운로드 하시겠습니까? 좋은 GUI에서 API 호출을 테스트 할 수있는 정말 멋진 앱입니다. 응답을 표시하고 응용 프로그램을 디버그하는 데 도움을줍니다. https://www.getpostman.com/ 행운을 빌어 요! – wuno

+0

api는 우체부에서 잘 작동합니다. 오류 디버깅을 시도했는데 아래의 오류가 발생하여이를 해결하는 방법을 모릅니다. – gdphy

+0

멋진 데 도움을 드리겠습니다. 몇 가지 말해줘. 1. 어떤 API를 사용하고 있습니까? 2. api 끝점에 필요한 토큰을 전달 했습니까? 3. API를 보여줄 수있는 문서가 있습니까? 사용자 이름 변수에 토큰을 전달하고이를 매개 변수로 설정하는 것처럼 보입니다.그런 다음 axios POST 요청을합니다. 나는 전에 이와 같은 문제가 있었는데, API의 100 %는 쿼리를 특정 방식으로 형식화 할 것을 기대하고 있으며, 약간의 실수를 저지르고있었습니다. Content-Type : application/json 헤더를 설정하는 것만 큼 간단 할 수 있습니다. 시도하고 정보를 보내주십시오. – wuno

답변

2

당신은 엉뚱한 곳에서 찾고 있습니다.

원격 서버가 요청을 처리 할 수없는 경우 오류 코드 500이 반환됩니다. 이 경우 ${helper.ROOT_URL}/result/GetListOfKodSesiSem에 대한 POST가 실패한 것 같습니다. axios 라이브러리는 약속 기반 라이브러리입니다. 이 같은 시도-catch 블록에 전화를 랩 : 이것은 적어도 당신에게 무슨 일이 일어나고 있는지에 대한 디버그 콘솔에서보기를 줄 것이다

try { 
    console.log(`${helper.ROOT_URL}/result/GetListOfKodSesiSem`) 
    let code_res = await 
    axios.post(`${helper.ROOT_URL}/result/GetListOfKodSesiSem`, param) 
    console.log(code_res.data);  
    if (code_res.data.length > 0) { 
    const { code } = code_res.data;   
    dispatch({ type: SEMCODE_FETCH_SUCCESS, payload: { semCode: code }}); 
    } 
} catch (err) { 
    console.error(`Error received from axios.post: ${JSON.stringify(err)}`); 
} 

. 그런 다음 백엔드의 디버그 로그로 해당 호출을 조정하여 오류가 실제로 무엇인지 파악할 수 있습니다.

근본 원인은 원격 서버가 서버 오류 (HTTP 코드 500)를 클라이언트에 반환하고 있기 때문입니다.

1

문제는 헤더에 JWT 토큰을 추가하지 않기 때문에 요청이 실패

. Axios의 사용

솔루션

및 코드와 함께이 작업을해야합니다. 분명히 여기서 큰 문제는 비어 있더라도 data을 전달해야한다는 것입니다. data을 전달하지 않으면 error 500으로 실패합니다.

export const getSemcode = (username) => async dispatch => { 

    let jwtToken = await AsyncStorage.getItem('jwtToken').then((data) => { 
     console.log('this is semcode',data); 
    }); 


    let config = { 
     method: 'POST', 
     url: 'url/to/sem', 
     headers: { 
      'content-type': 'application/x-www-form-urlencoded', 
      AntiTemperSignature: jwtToken, 
      UserID: '123456', 
     }, 
     data: '', 
     json: true 
    }; 

    try { 
    return axios(config) 
    .then((response) => { 
     console.log(response); 
     if (response.data.length > 0) { 
      const { code } = response.data; 
      dispatch({ type: SEMCODE_FETCH_SUCCESS, payload: { semCode: code } }); 
     } 
    }) 
    .catch((error) => { 
     console.log(error); 
    }); 
    } 
}