Axios: Axios catch 였λ₯˜λŠ” μ„œλ²„ 응닡이 μ•„λ‹Œ javascript 였λ₯˜λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

에 λ§Œλ“  2017λ…„ 06μ›” 17일  Β·  87μ½”λ©˜νŠΈ  Β·  좜처: axios/axios

μ„œλ²„μ—μ„œ μœ νš¨μ„± 검사 였λ₯˜λ₯Ό 작으렀고 ν•©λ‹ˆλ‹€.

μ•”ν˜Έ:

axios.post('/formulas/create', {
       name: "",
       parts: ""
})
.then( 
    (response) => { console.log(response) },
    (error) => { console.log(error) }
);

μ½˜μ†” 둜그 좜λ ₯

Error: Request failed with status code 422
    at createError (app.js:6765)
    at settle (app.js:29489)
    at XMLHttpRequest.handleLoad (app.js:6600)

λ„€νŠΈμ›Œν¬ νƒ­ 좜λ ₯
{"name":["이름 ν•„λ“œλŠ” ν•„μˆ˜μž…λ‹ˆλ‹€."],"parts":["λΆ€ν’ˆ ν•„λ“œλŠ” ν•„μˆ˜μž…λ‹ˆλ‹€."]}

λ‚΄ λ„€νŠΈμ›Œν¬ νƒ­μ˜ 응닡인 JSON 양식 μœ νš¨μ„± 검사가 ν¬ν•¨λœ κ°œμ²΄κ°€ ν‘œμ‹œλ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. JS catch 좜λ ₯을 μ–»λŠ” 것 κ°™μŠ΅λ‹ˆκΉŒ?

λ˜ν•œ λ‹€μŒμ„ μ‹œλ„ν–ˆμŠ΅λ‹ˆλ‹€.

axios.post('/formulas/create', {
    name: "",
    parts: ""
})
.then(response => { 
    console.log(response)
})
.catch(error => {
    console.log(error)
});

같은 κ²°κ³Ό

μ—¬κΈ° λ‚˜μ™€ 같은 ν™˜κ²½μ„ μ‚¬μš©ν•˜λ©΄μ„œ 더 λ§Žμ€ μ‚¬λžŒλ“€μ΄ 같은 문제λ₯Ό κ²ͺκ³  μžˆλŠ” 것 κ°™λ‹€.
https://laracasts.com/discuss/channels/vue/issues-with-axios-catch-method

  • Axios 버전: ^0.16.2
  • λ·°JS 2.3.4
  • Vue ν…œν”Œλ¦Ώ 컴파일러 2.3.4
  • 라라벨 믹슀
  • ν™˜κ²½: λ…Έλ“œ v6.4.0, 크둬 58, Mac OSX 10.12.4

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

λ‚˜λŠ” μ •ν™•νžˆ 같은 ν™˜κ²½μ„ κ°€μ§€κ³ μžˆλ‹€. 이 μ‹œλ„:

axios.post('/formulas/create', {
    name: "",
    parts: ""
})
.then(response => { 
    console.log(response)
})
.catch(error => {
    console.log(error.response)
});

μ—μ„œ μˆ˜μ • console.log(error) 에 console.log(error.response) μ—μ„œ catch .

μ „μ—­ 인터셉터λ₯Ό μ‚¬μš©ν•˜κ³  error.response 만 κ±°λΆ€ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. λ¬Έμ œλŠ” console.log κ°€ 였λ₯˜λ₯Ό 좜λ ₯ν•˜λ €κ³  ν•  λ•Œ 개체 ꡬ쑰가 μ•„λ‹Œ λ¬Έμžμ—΄ ν‘œν˜„μ΄ μΈμ‡„λ˜μ–΄ .response 속성이 ν‘œμ‹œλ˜μ§€ μ•ŠλŠ”λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

λͺ¨λ“  87 λŒ“κΈ€

λ‚˜λŠ” μ •ν™•νžˆ 같은 ν™˜κ²½μ„ κ°€μ§€κ³ μžˆλ‹€. 이 μ‹œλ„:

axios.post('/formulas/create', {
    name: "",
    parts: ""
})
.then(response => { 
    console.log(response)
})
.catch(error => {
    console.log(error.response)
});

μ—μ„œ μˆ˜μ • console.log(error) 에 console.log(error.response) μ—μ„œ catch .

μ „μ—­ 인터셉터λ₯Ό μ‚¬μš©ν•˜κ³  error.response 만 κ±°λΆ€ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. λ¬Έμ œλŠ” console.log κ°€ 였λ₯˜λ₯Ό 좜λ ₯ν•˜λ €κ³  ν•  λ•Œ 개체 ꡬ쑰가 μ•„λ‹Œ λ¬Έμžμ—΄ ν‘œν˜„μ΄ μΈμ‡„λ˜μ–΄ .response 속성이 ν‘œμ‹œλ˜μ§€ μ•ŠλŠ”λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

response μ†μ„±λ§Œ κ±°λΆ€ν•˜λŠ” 방법이 κΆκΈˆν•˜μ‹  뢄듀을 μœ„ν•΄ λ‹€μŒκ³Ό 같이 ν•©λ‹ˆλ‹€.

axios.interceptors.response.use((response) => {
    return response;
}, function (error) {
    // Do something with response error
    if (error.response.status === 401) {
        console.log('unauthorized, logging out ...');
        auth.logout();
        router.replace('/auth/login');
    }
    return Promise.reject(error.response);
});

μ€‘μš”ν•œ 뢀뢄은 return Promise.reject(error.response);

λ“€μ—¬μ“°κΈ° λ˜λŠ” μΆ•μ†Œν•˜λŠ” λ™μ•ˆ μœ„μ˜ μ†”λ£¨μ…˜μ΄ JS 파일 ꡬ문을 μ—‰λ§μœΌλ‘œ λ§Œλ“œλŠ” 경우 λ™μΌν•œ κ²°κ³Όλ₯Ό μ‚°μΆœν•©λ‹ˆλ‹€. :)

.post('ajax/register/otp', this.registerData)
.then(function (response) {
       return otpSent(response)
})
.catch(function (error) {
      console.log(error.response);
 });

@gopal-g μ €μ—κ²Œ μ •μ˜λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

@pedro-mass 이 경우 μ„œλ²„ μΈ‘μ—μ„œ 응닡이 없을 수 μžˆμŠ΅λ‹ˆλ‹€. λ‚΄ μ‹œλ‚˜λ¦¬μ˜€μ—μ„œ 였λ₯˜κ°€ λ°œμƒν–ˆμ„ λ•Œ λ‚΄ 응닡은 JSONμ΄μ—ˆμŠ΅λ‹ˆλ‹€. error.response μ‚¬μš©ν•˜μ—¬ 응닡을 얻을 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

@gopal-g 개발 λ„κ΅¬μ—μ„œ λ„€νŠΈμ›Œν¬ 탭을 보고 있으면 응닡을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. 차이가 μžˆλ‹€λ©΄ 401μž…λ‹ˆλ‹€.

@pedro-mass와 λ™μΌν•œ 였λ₯˜κ°€ μžˆμŠ΅λ‹ˆλ‹€.

μ—¬κΈ° λ‚΄ μ½”λ“œκ°€ μžˆμŠ΅λ‹ˆλ‹€

async function test () {
try {
  let res = await axios.get('/xxxxx/xxxx')

} catch (e) {
  console.log(e.response) // undefined
}
}

"error.response"λ₯Ό μ‚¬μš©ν•˜λ©΄ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ¬Έμ œλŠ” λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ˜ 연결을 끊고 μ›Ή μ„œλ²„μ—μ„œ 였λ₯˜ 500을 λ°˜ν™˜ν–ˆμ„ λ•Œ λ°œμƒν•©λ‹ˆλ‹€.

개발 λ„κ΅¬μ˜ λ„€νŠΈμ›Œν¬ νƒ­

응닡 μ½”λ“œ: 500
응닡 λ³Έλ¬Έ:

{
  "error": {
    "statusCode": 500,
    "name": "Error",
    "message": "read ETIMEDOUT",
    "code": "ETIMEDOUT",
    "errno": "ETIMEDOUT",
    "syscall": "read",
    "stack": "Error: read ETIMEDOUT\n    at exports._errnoException (util.js:1050:11)\n    at TCP.onread (net.js:582:26)"
  }
}

크둬 μ½˜μ†” 였λ₯˜:

Uncaught (in promise) Error: Request failed with status code 500
    at createError (createError.js:15)
    at settle (settle.js:18)
    at XMLHttpRequest.handleLoad (xhr.js:77)

버전

"axios": "^0.15.3"

catch μΊμΉ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€. μš”μ²­μ΄ 이루어 지기 전에 였λ₯˜κ°€ λ°œμƒν•˜λ©΄ catch μ—λŠ” err.response 속성이 μ—†μŠ΅λ‹ˆλ‹€. μ™œλƒν•˜λ©΄... 음.. . 응닡이 μ—†μŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ catch λŠ” λͺ¨λ“  였λ₯˜λ₯Ό 포착 @fabiorecife 의 κ²½μš°μ™€ 같이 λ„€νŠΈμ›Œν¬ μž₯μ• λ‘œ 인해 응닡이 μ—†λŠ” 경우 λ§ˆμ°¬κ°€μ§€ μž…λ‹ˆλ‹€. 항상 그런 것은 μ•„λ‹ˆλ―€λ‘œ err λ₯Ό HTTP 였λ₯˜λ‘œ μ·¨κΈ‰ν•˜μ§€ λ§ˆμ‹­μ‹œμ˜€.

@ alsofronie κ·Έλž˜μ„œ 예λ₯Ό λ“€μ–΄ 413κ³Ό 같은 λΉ„ν–‰ μ „ μ‹€νŒ¨μ™€ 같이 μ„ ν˜Έν•˜λŠ” 처리 방법(λ‹€λ₯Έ 것과 ꡬ별)은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?

λΉ„μŠ·ν•œ λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€. Chrome devtools에 401 κ°€ ν‘œμ‹œλ˜κ³  응닡은 {"message":"Identity token has expired"} 이고 μ €λŠ” catch( (error) => {...}) μ΄μ§€λ§Œ error.responseλŠ” λΉ„μ–΄ μžˆμŠ΅λ‹ˆλ‹€. GET 와 μ—°κ²°λœ μ„ ν–‰ OPTIONS 호좜의 μƒνƒœκ°€ 200 이기 λ•Œλ¬ΈμΈμ§€ κΆκΈˆν•©λ‹ˆλ‹€. 이 경우 μ–΄λ–»κ²Œ ν•΄μ•Ό ν•˜λ©° 401 μƒνƒœ μ½”λ“œλ₯Ό 검색할 수 μžˆλŠ” μ˜¬λ°”λ₯Έ μœ„μΉ˜λŠ” μ–΄λ””μž…λ‹ˆκΉŒ?

@robbiemu 제 μƒκ°μ—λŠ” 이미 λ¬Έμ„œν™”λ˜μ–΄ μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€: https://github.com/axios/axios#handling -errors

@mrchief 이것 에 λŒ€ν•΄ κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€. λ‹€μ‹œ ν•œ 번 error.response κ°œμ²΄κ°€ μžˆμ§€λ§Œ ν•„λ“œλŠ” undefined 이고 response λ‚΄λΆ€μ˜ 값에 λŒ€ν•œ λͺ¨λ“  ν˜ΈμΆœμž…λ‹ˆλ‹€.

@paolavness 여기에 μ–ΈκΈ‰ν•˜λŠ” λŒ€μ‹  μƒˆ 문제λ₯Ό μ—¬λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. λ§Žμ€ μ‹œκ³„ 폐쇄 λ¬Έμ œκ°€ μ—†μŠ΅λ‹ˆλ‹€. μ•„λ‹ˆλ©΄ StackOverflow에 λ¬Όμ–΄λ³Ό μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

@mrchief μ•„ 이게 λ‹«ν˜”

λ‚˜λŠ” 같은 λ¬Έμ œκ°€ μžˆμ—ˆλ‹€. ꢁ극적으둜 였λ₯˜ μ½”λ“œλ₯Ό 401μ—μ„œ 403으둜 λ³€κ²½ν–ˆκ³  λͺ¨λ“  것이 μ˜ˆμƒλŒ€λ‘œ μž‘λ™ν–ˆμŠ΅λ‹ˆλ‹€. 빈 였λ₯˜ κ°œμ²΄μ— λŒ€ν•œ 이유λ₯Ό μΆ”μΈ‘ν•˜κ³  있으며 κ²°κ³Ό μžλ°”μŠ€ν¬λ¦½νŠΈ 였λ₯˜λŠ” 401 였λ₯˜μ— λŒ€ν•œ μ„€λͺ…μ„œμ—μ„œ 찾은 이 λͺ…λ Ήλ¬Έκ³Ό 관련이 μžˆμŠ΅λ‹ˆλ‹€.

"[A 401 였λ₯˜] μ‘λ‹΅μ—λŠ” μš”μ²­λœ λ¦¬μ†ŒμŠ€μ— μ μš©ν•  수 μžˆλŠ” μ±Œλ¦°μ§€κ°€ ν¬ν•¨λœ WWW-Authenticate 헀더 ν•„λ“œκ°€ ν¬ν•¨λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€."

λ”°λΌμ„œ 401 였λ₯˜λ₯Ό ν™œμš©ν•˜λ €λ©΄ www-authenticate 헀더 ν•„λ“œλ₯Ό 포함해야 ν•©λ‹ˆλ‹€. 이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜μ§€ μ•ŠμœΌλ €λ©΄ 403 였λ₯˜λ₯Ό μ‚¬μš©ν•˜μ‹­μ‹œμ˜€.

쒋은 μ•„μΉ¨μž…λ‹ˆλ‹€. 이 λ¬Έμ œκ°€ μžˆμ—ˆμ§€λ§Œ μ„œλ²„μ—μ„œ corsλ₯Ό ν™œμ„±ν™”ν•˜λ„λ‘ μ•„νŒŒμΉ˜ ꡬ성을 λ³€κ²½ν•˜μ—¬ μˆ˜μ •ν–ˆμŠ΅λ‹ˆλ‹€. μ•„λž˜ 링크λ₯Ό μ‚΄νŽ΄λ³΄μ„Έμš”

https://enable-cors.org/server_apache.html

console.log(JSON.stringify(error)) 둜만 λͺ¨λ“  응닡을 디버그할 수 μžˆμŠ΅λ‹ˆλ‹€.

axios.post(URL)
.then((응닡) => {
// 무엇
})
.catch((응닡) => {
if (response.status == μ •μ˜λ˜μ§€ μ•ŠμŒ) {
κ²½κ³ ('무단')
}
})

@fabiorecife μ—μ„œ μ„€λͺ…ν•œ 것과 λ˜‘κ°™μ€ λ¬Έμ œκ°€

.catch(error=>{
let errorObject=JSON.parse(JSON.stringify(error));
console.log(errorObject);
dispatch(authError(errorObject.response.data.error));
})

그러면 errorObject λ³€μˆ˜μ— μ˜ˆμƒλœ κ²°κ³Όκ°€ μƒμ„±λ©λ‹ˆλ‹€.

@petruscurtu λ‚˜λ„ 같은 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€! 그것은 λ‚˜λ₯Ό μœ„ν•΄ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€!
image
λ‚˜λŠ” 그것이 'no Access-control-allow-origin'을 λ˜μ§€λŠ” 이유λ₯Ό λͺ¨λ₯΄μ§€λ§Œ μ„œλ²„κ°€ 그것을 μ„€μ •ν–ˆμŠ΅λ‹ˆλ‹€! 응닡 ν—€λ”λŠ” μ •μƒμž…λ‹ˆλ‹€

image

ν•΄κ²°λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 인증 APIκ°€ Access-control-allow-origin이 μžˆμ–΄μ•Ό ν•˜λŠ” μ˜¬λ°”λ₯Έ 헀더에 μ‘λ‹΅ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

@luxueyan μ„œλ²„μ—μ„œ CORSλ₯Ό μ²˜λ¦¬ν•˜λŠ” 방법을 λͺ¨λ₯΄κΈ° λ•Œλ¬Έμ— λ¬Έμ œκ°€ 무엇인지 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. axios에 κ΄€ν•œ ν•œ μ½˜μ†” 좜λ ₯μ—μ„œ ​​ꡬ성 및 μš”μ²­ 개체λ₯Ό λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 당신이 κ·Έ 좜λ ₯을 ν™•μΈν•΄μ•Όν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. μ„œλ²„κ°€ λ‹€μ‹œ λ³΄λ‚΄λŠ” 응닡 ν˜•μ‹κ³Ό 관련이 μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

@luxueyan Access-control-allow-origin 을 http://localhost:8081 둜 μ„€μ •ν•œ 것 κ°™μŠ΅λ‹ˆλ‹€(이 μ£Όμ†Œκ°€ http://10.31.143.32:8080 μ„œλ²„μ— μ„€μ •λ˜μ–΄ μžˆλ‹€κ³  κ°€μ •). URL이 무엇인지 확인할 수 μžˆμŠ΅λ‹ˆκΉŒ? 이 ν”„λ‘œμ νŠΈλ₯Ό μ‹€ν–‰ν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ? http://localhost:8081 μž…λ‹ˆκΉŒ? 그렇지 μ•ŠμœΌλ©΄ 포트 λ²ˆν˜Έκ°€ 달라도 CORS 도메인 κ·œμΉ™μ„ μœ„λ°˜ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

@petruscurtu 응닡 μΈν„°μ…‰ν„°μ—μ„œ 좜λ ₯은 'JSON.parse(JSON.stringify(error))'μž…λ‹ˆλ‹€. 응닡 속성이 μ—†μŠ΅λ‹ˆλ‹€

@chiefie λ‹€λ₯Έ ajax APIκ°€ μ˜¬λ°”λ₯Έ μ½˜ν…μΈ μ— 응닡할 수 있기 λ•Œλ¬Έμ— 'Access-control-allow-origin' 섀정이

μ—…λ°μ΄νŠΈ! 그것은 μ„œλ²„ API 였λ₯˜μ˜€μŠ΅λ‹ˆλ‹€. 헀더에 cors 섀정이 μ—†μ—ˆμŠ΅λ‹ˆλ‹€. 이제 잘 μž‘λ™ν•©λ‹ˆλ‹€.

@juliano-barros κ°μ‚¬ν•©λ‹ˆλ‹€. ꡐ차 좜처 λ•Œλ¬Έμ΄μ—ˆμŠ΅λ‹ˆλ‹€. 이제 λͺ¨λ“  ajax μš”μ²­μ΄ μ œλŒ€λ‘œ μž‘λ™ν•©λ‹ˆλ‹€.

이 μ›μ‹œ 였λ₯˜λŠ” μ„œλ²„μ— μ—°κ²°ν•  수 μ—†κ±°λ‚˜ CORSκ°€ λ¬΄νš¨ν™”λ  λ•Œλ§ˆλ‹€ λ°œμƒν•©λ‹ˆλ‹€.
error.response λŠ” undefined μž…λ‹ˆλ‹€.

방금 λ©”μ‹œμ§€, μƒνƒœ 및 응닡 데이터λ₯Ό ν¬ν•¨ν•˜μ§€λ§Œ 항상 λ™μΌν•œ ꡬ쑰λ₯Ό λ”°λ₯΄λŠ” IntegrationErrorλ₯Ό μƒμ„±ν–ˆμŠ΅λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ μ²˜λ¦¬μ—μ„œ axios/raw 였λ₯˜λ₯Ό 뢄리할 수 μžˆμŠ΅λ‹ˆλ‹€.

Axios μ—¬λŸ¬λΆ„, 이것은 error.response ν¬ν•¨ν•˜μ—¬ HTTP 였λ₯˜μ—¬μ•Ό ν•©λ‹ˆλ‹€.
μœ„μ™€ 같이 확인할 수 μžˆμŠ΅λ‹ˆλ‹€

μ–΄μ œλŠ” 이 문제의 1주년이 λ˜λŠ” λ‚ μ΄μ—ˆμŠ΅λ‹ˆλ‹€. 이 μ‹œμ μ—μ„œ "κ³ μ •"λ˜κ±°λ‚˜ "λΉ„ 문제"둜 κ°„μ£Όλ©λ‹ˆκΉŒ?

@frostshoxx κ·Έλž˜μ„œ λ‚˜λŠ” 이것이 "λΉ„λ¬Έμ œ"라고 μƒκ°ν•©λ‹ˆλ‹€. λ‹€λ₯Έ λͺ¨λ“  μ‚¬λžŒλ“€κ³Ό 같은 문제λ₯Ό κ²ͺκ³  μžˆμ§€λ§Œ 이제 무슨 일이 μΌμ–΄λ‚˜κ³  μžˆλŠ”μ§€ μ΄ν•΄ν•˜κ³  이것이 λ²„κ·Έλ‚˜ λ¬Έμ œκ°€ μ•„λ‹ˆλΌ 세상이 μž‘λ™ν•˜λŠ” λ°©μ‹μ΄λΌλŠ” 것을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

ν˜Όλž€μŠ€λŸ¬μ›Œν•˜λŠ” λͺ¨λ“  μ‚¬λžŒλ“€μ„ μœ„ν•΄(그리고 이 λ¬Έμ œκ°€ 1년이 된 것을 μΆ•ν•˜ν•˜κΈ° μœ„ν•΄) 무슨 일이 μΌμ–΄λ‚˜κ³  있으며 μ„œλ²„ 응닡을 λ°›λŠ” 방법을 μ„€λͺ…ν•˜κ² μŠ΅λ‹ˆλ‹€.

μ–΄λ–»κ²Œ μ—¬κΈ°κΉŒμ§€ μ™”μŠ΅λ‹ˆκΉŒ?

.catch() 황무지λ₯Ό λ§Œλ‚˜λŠ” λ°μ—λŠ” μ—¬λŸ¬ 가지 μ΄μœ κ°€ μžˆμŠ΅λ‹ˆλ‹€. λ•Œλ•Œλ‘œ AxiosλŠ” μš”μ²­ μ΄ˆκΈ°μ— 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€. 이것은 λ•Œλ•Œλ‘œ CORS μš”μ²­μ—μ„œ λ°œμƒν•©λ‹ˆλ‹€. Axios OPTIONSλ₯Ό μ‚¬μš©ν•  수 μ—†λŠ” 경우 AxiosλŠ” νŒ¨λ‹‰ μƒνƒœλ‘œ μ„œλ²„μ—μ„œ μ‹€μ œλ‘œ 응닡을 λ°›κΈ° 전에 .catch() 둜 μ‚¬μš©μžλ₯Ό λ³΄λ‚΄λ―€λ‘œ μ΄λŸ¬ν•œ 경우 응닡을 μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

μ—¬λŸ¬λΆ„ 쀑 μΌλΆ€λŠ” "μ•„λ‹ˆμš”, DevToolsμ—μ„œ 그것을 λ³΄μ•˜μœΌλ―€λ‘œ 응닡이 λŒμ•„μ™”μŠ΅λ‹ˆλ‹€!"라고 말할 수 μžˆμŠ΅λ‹ˆλ‹€. λ•Œλ•Œλ‘œ Axiosκ°€ HTTP μš”μ²­μ„ μ‹œμž‘ν•˜κ³  였λ₯˜κ°€ λ°œμƒν•˜κ³  자체λ₯Ό μ€‘λ‹¨ν•˜κ³  μ„œλ²„κ°€ μ‘λ‹΅ν•˜κΈ° 전에 .catch() 보내기 λ•Œλ¬Έμ— 이것이 항상 사싀인 것은 μ•„λ‹™λ‹ˆλ‹€. Axiosκ°€ .catch() ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•œ ν›„ λͺ‡ λ°€λ¦¬μ΄ˆ 후에 μ„œλ²„κ°€ 응닡과 ν•¨κ»˜ λŒμ•„μ˜¬ 수 μžˆμŠ΅λ‹ˆλ‹€. 이 응닡은 μ—¬μ „νžˆ ​​응닡을 μˆ˜μ‹ ν•˜κ³  있기 λ•Œλ¬Έμ— DevTools에 ν‘œμ‹œλ©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ AxiosλŠ” 이 μ‹œμ μ—μ„œ μ˜€λž«λ™μ•ˆ μˆ˜ν–‰λ˜μ—ˆμœΌλ―€λ‘œ Axiosκ°€ .catch() κΈ°λŠ₯을 μ‹œμž‘ν•  λ‹Ήμ‹œμ— μ‘΄μž¬ν•˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ— response λ₯Ό μ‚¬μš©ν•  수 μ—†μ—ˆμŠ΅λ‹ˆλ‹€.

μ„œλ²„μ—μ„œ 4XX λ˜λŠ” 5XX 였λ₯˜μ— λŒ€ν•œ λ©”μ‹œμ§€λ₯Ό 받은 뢄듀은 운이 쒋은 κ²ƒμž…λ‹ˆλ‹€! 이 였λ₯˜λ₯Ό μ–»κΈ° μœ„ν•΄ AxiosλŠ” 전체 μ„œλ²„ 응닡을 κΈ°λ‹€λ €μ•Ό ν–ˆκΈ° λ•Œλ¬Έμ— 일반적으둜 μ‚¬μš©ν•  수 μžˆλŠ” μ„œλ²„μ˜ 응닡이 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ 경우 AxiosλŠ” response 둜 μ‚¬μš©μžλ₯Ό .catch() 둜 λ³΄λ‚΄μ§€λ§Œ 응닡을 μ¦‰μ„μ—μ„œ μƒμ„±ν•˜λŠ” 자체 error 개체둜 λž˜ν•‘ν•©λ‹ˆλ‹€.
λ”°λΌμ„œ 5XX λ˜λŠ” 4XX 였λ₯˜κ°€ λ°œμƒν•˜λŠ” 경우 μ„œλ²„ 응닡을 μ‚¬μš©ν•  수 μžˆμ§€λ§Œ 깊이 λ¬»ν˜€ μžˆμŠ΅λ‹ˆλ‹€!

error.response.data.data.message μ‹œλ„ν•˜μ‹­μ‹œμ˜€. 이것은 μ„œλ²„ 였λ₯˜λ₯Ό λ°˜ν™˜ν•˜λŠ” Laravel API μš”μ²­μ— λŒ€ν•΄ μž‘λ™ν•˜λŠ” κ²ƒμœΌλ‘œ ν™•μΈλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

λΉ„ Laravel μ‚¬μš©μž -- μ„œλ²„μ—μ„œ 핡심 응닡을 μ–»μœΌλ €λ©΄ μ΅œμ†Œν•œ error.response.data 둜 이동해야 ν•˜μ§€λ§Œ λŒ€λΆ€λΆ„μ˜ μ„œλ²„λŠ” 응닡을 λ‹€λ₯Έ data{} 개체둜 λž˜ν•‘ν•˜λŠ” 것보닀 λ ˆμ΄μ–΄λ₯Ό 더 깊게 ν•œ λ‹€μŒ λ§ˆμ§€λ§‰μœΌλ‘œ κ±°κΈ°μ—μ„œ .message 와 같은 응닡 속성에 μ•‘μ„ΈμŠ€ν•©λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ λ‚˜λŠ” Console.Logλ₯Ό μˆ˜ν–‰ν–ˆκ³  응닡이 μ—†μŠ΅λ‹ˆλ‹€!

λ„€, μ•Œμ•„μš”. ν•˜μ§€λ§Œ κ·Έλƒ₯ 웃기렀고 error.response.data λ₯Ό 좜λ ₯ν•΄ λ³΄μ„Έμš”.

μ–΄λ–€ 이유둜 AxiosλŠ” 였λ₯˜ κ°œμ²΄μ—μ„œ console.log(error) 의 좜λ ₯을 μˆ˜μ •ν•©λ‹ˆλ‹€. μ™œ 그듀이 이것을 ν•˜λŠ”μ§€λŠ” λͺ¨λ₯΄κ² μ§€λ§Œ, λŒ€μ‹  console.log(JSON.stringify(error)) λ₯Ό μ“°λ©΄ 전체 객체가 μ˜κ΄‘μœΌλ‘œ 보일 κ²ƒμž…λ‹ˆλ‹€.

이것은 μ§λ ¬ν™”λœ JSON으둜 μ•½ 2개의 λ ˆμ΄μ–΄ 깊이 후에 읽기가 μ–΄λ ΅μŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ 전체 λ‚΄μš©μ„ λ³΅μ‚¬ν•˜μ—¬ JSON prettifyer 에 λΆ™μ—¬λ„£μ–΄ 였λ₯˜ 객체의 ꡬ쑰λ₯Ό 탐색해야 ν•©λ‹ˆλ‹€.


Axiosμ—μ„œ 500 였λ₯˜ λ˜λŠ” 400 μœ ν˜• 였λ₯˜(λ˜λŠ” μ‹€μ œλ‘œ μ„œλ²„μ—μ„œ μ œκ³΅ν•œ 였λ₯˜ μ½”λ“œ)κ°€ λ°œμƒν•˜λ©΄ μš”μ²­μ΄ μ™„λ£Œλ˜μ—ˆμœΌλ©° μ„œλ²„μ˜ 응닡을 μ‚¬μš©ν•  수 μžˆμŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€!

λ¬Έμ œλŠ” 그것이 맀우 깊으며 Axiosκ°€ λŒ€λΆ€λΆ„μ˜ μ‚¬λžŒλ“€μ΄ error{} 개체λ₯Ό 보기 μœ„ν•΄ μˆ˜ν–‰ν•˜λŠ” console.log(error) 의 좜λ ₯을 μˆ˜μ •ν•˜κΈ° λ•Œλ¬Έμ— λŒ€λΆ€λΆ„μ˜ μ‚¬λžŒλ“€μ€ 그것이 μ‘΄μž¬ν•œλ‹€λŠ” 것을 λͺ¨λ¦…λ‹ˆλ‹€. ν•˜μ§€λ§Œ 거기에 μžˆμŠ΅λ‹ˆλ‹€!

@VSG24 맨!! 생λͺ…을 κ΅¬ν•˜λŠ” λ‹΅λ³€μž…λ‹ˆλ‹€ :D

fwiw, μˆœν™˜ 참쑰둜 인해 0.18.0μ—μ„œ JSON.stringify(error) 폭탄이 λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.

였λ₯˜ λ°œμƒ μ‹œ μ„œλ²„ 응닡을 μ œκ³΅ν•˜λŠ” 인터셉터λ₯Ό μ„€μ •ν–ˆμŠ΅λ‹ˆλ‹€.

axios.interceptors.response.use(
  response => {
    // do someting on response
    return response
  },
  error => {
    // do someting on errir
    return Promise.reject(error.response.data) // => gives me the server resonse
  }
)
    try {
      const { data } = await htttp.post(login, payload)
      // do someting with data
    } catch (e) {
      console.log(e) // server response data
    }

@alimirayman λͺ¨λ“  μš”μ²­μ„ μ£Όμ‹œν•  ν•„μš”κ°€ μ—†λ‹€λ©΄ 잘 μž‘λ™ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λͺ¨λ“  μš”μ²­μ„ 좔적해야 ν•˜λŠ” 경우 λ‚΄ μ½”λ“œμ˜ λͺ¨λ“  μœ„μΉ˜μ—μ„œ 였λ₯˜ 처리기λ₯Ό λ°˜λ³΅ν•˜λŠ” 것은 합리적이지 μ•ŠμŠ΅λ‹ˆλ‹€. λ‚΄κ°€ 잘λͺ» μ΄ν•΄ν•˜μ§€ μ•ŠλŠ” ν•œ(κ²½μš°μ— 따라 닀름), axiosλŠ” 였λ₯˜λ₯Ό λ˜μ§€κΈ° 전에 μ„œλ²„κ°€ 였λ₯˜λ₯Ό λ°˜ν™˜ν–ˆλŠ”μ§€ 확인해야 ν•˜μ§€ μ•Šκ² μŠ΅λ‹ˆκΉŒ?

@hhowe29 circular-json

λ‹€λ₯Έ λ§Žμ€ μŠ€λ ˆλ“œμ™€ λ§ˆμ°¬κ°€μ§€λ‘œ 이 μŠ€λ ˆλ“œλ₯Ό μ°Ύμ•˜κ³  vue.js 및 vuex λͺ¨λ“ˆκ³Ό ν•¨κ»˜ axiosλ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

λ‚΄ vuex λͺ¨λ“ˆ μž‘μ—…μ€ axios 였λ₯˜λ₯Ό catchν•˜κ³  commit(ERROR_HAPPENED, error)을 μ‹€ν–‰ν•˜μ—¬ vuex λͺ¨λ“ˆμ˜ ERROR_HAPPENED λŒμ—°λ³€μ΄λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 였λ₯˜λŠ” 응닡 속성 없이 λ„μ°©ν•˜μ—¬ vuex μƒνƒœλ‘œ 응닡을 μ„€μ •ν•˜λ €κ³  ν•˜λ©΄ error.responseκ°€ μ •μ˜λ˜μ§€ μ•Šκ²Œ λ©λ‹ˆλ‹€.

λ‚΄κ°€ console.log(error.response) μž‘μ—…μ„ μˆ˜ν–‰ν•˜λ©΄ commit() 전에 응닡을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ vuex에 μ˜ν•΄ 엉망이 될 κ°€λŠ₯성이 ν½λ‹ˆλ‹€.

commit(ERROR_HAPPENED, error.response.data) λ˜λŠ” μž‘μ—…μ—μ„œ 401인지 ν™•μΈν•˜κ³  μƒνƒœ μ½”λ“œμ— 따라 λ‹€λ₯Έ 컀밋을 μ‹€ν–‰ν•©λ‹ˆλ‹€. 이 맹글링은 401 μ½”λ“œμ—μ„œλ§Œ λ°œμƒν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. 404 λ˜λŠ” 500κ³Ό 같은 λ‹€λ₯Έ 였λ₯˜λŠ” λ‚΄ λŒμ—°λ³€μ΄λ‘œ μ „λ‹¬λ©λ‹ˆλ‹€.

망가지지 μ•Šμ•˜μŠ΅λ‹ˆλ‹€. VuexλŠ” 버그가 μ•„λ‹ˆλΌλ„ 이것을 λ§ΉκΈ€λ§ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
λŒ€λΆ€λΆ„ Axios 인터셉터 λ‚΄λΆ€μ—μ„œ λ°œμƒν•˜λŠ” 일뢀 였λ₯˜λ‘œ 인해 이것이 λ…ΈμΆœλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

일뢀 μ—…λ°μ΄νŠΈ ?

@AllanPinheiroDeLima 닡변이 λŠ¦μ–΄ μ£„μ†‘ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ λˆ„κ΅°κ°€ μ½”λ“œμ˜ λͺ¨λ“  단일 μœ„μΉ˜μ— 인터셉터λ₯Ό μž‘μ„±ν•˜μ§€ μ•ŠλŠ”λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. μš°λ¦¬λŠ” μ½”λ“œ λ² μ΄μŠ€μ— 인터셉터λ₯Ό ν•œ 번 μž‘μ„±ν•˜κ³  이λ₯Ό λ„μš°λ―Έ 클래슀둜 μ‚¬μš©ν•©λ‹ˆλ‹€. 1λ²ˆμž…λ‹ˆλ‹€. 2번, 초기 μΏΌλ¦¬λŠ” _server error response_λ₯Ό 받지 λͺ»ν–ˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. λŒ€μ‹  try catch μ—μ„œ _javascript error_λ₯Ό λ°›μ•˜μŠ΅λ‹ˆλ‹€ axios 였λ₯˜ μΈν„°μ…‰ν„°λŠ” 기본적으둜 μ½”λ“œ 방식을 λ³€κ²½ν•˜κ±°λ‚˜ λŒ€κ·œλͺ¨ μ½”λ“œ κΈ°λ°˜μ„ λ³€κ²½ν•˜μ§€ μ•ŠμœΌλ €λŠ” 경우 ν•΄λ‹Ή 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ 미듀웨어 역할을 ν•©λ‹ˆλ‹€.

예, λ™μ˜ν•©λ‹ˆλ‹€. μ›μ‹œ keycloak을 μ‚¬μš©ν•˜λŠ” λŒ€μ‹  λ‚΄ μ„œλ²„μ— ν†΅ν•©ν•˜λŠ” 이 λ¬Έμ œμ— λŒ€ν•œ 해결책을 μ°Ύμ•˜μŠ΅λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ μ„œλ²„μ—μ„œ 였λ₯˜λ₯Ό κ°€λ‘œμ±„μ„œ 읽을 수 μžˆλŠ” 였λ₯˜λ₯Ό ν”„λŸ°νŠΈ μ—”λ“œλ‘œ 보낼 수 μžˆμŠ΅λ‹ˆλ‹€. μ§€κΈˆμœΌλ‘œμ„œλŠ” 이런 μ’…λ₯˜μ˜ 문제λ₯Ό ν•΄κ²°ν•  수 μžˆλŠ” μœ μΌν•œ 방법이라고 μƒκ°ν•©λ‹ˆλ‹€. :)

아직 같은 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. Axios 인터셉터 console.log('interceptors', JSON.stringify(error)) ν•˜λ©΄ 이 둜그 interceptors {"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","url":"http://localhost:5000/api/autenticacao/login","data":"{\"siglaInstituicao\":\"NEAS\",\"usuario\":\"emersoncpaz\",\"senha\":\"belle1903\"}"},"request":{}} λ˜μ§€λ§Œ chrome devtools μ‘λ‹΅μ—λŠ” APIμ—μ„œ μ˜¬λ°”λ₯Έ 응닡이 μžˆμŠ΅λ‹ˆλ‹€. A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server) axiosμ—μ„œ 이 응닡을 μ–»λŠ” 방법은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?

5xx 였λ₯˜κ°€ catch λΈ”λ‘μ—μ„œ μ²˜λ¦¬λ˜μ§€ μ•ŠλŠ” μ΄μœ κ°€ λ¬΄μ—‡μž…λ‹ˆκΉŒ(응닡 개체λ₯Ό λ°˜ν™˜ν•˜μ§€ μ•ŠμŒ)? μƒνƒœ μ½”λ“œ 502λŠ” DevTool μ½˜μ†”μ— λ‚˜νƒ€λ‚˜μ§€λ§Œ Axiosμ—μ„œ μ²˜λ¦¬λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

이것은 λ‚˜λ₯Ό μœ„ν•΄ μΌν–ˆμŠ΅λ‹ˆλ‹€ (라라벨 쀑단 λ„μš°λ―Έ μ‚¬μš©: abort(500, 'message'))
```
.catch(였λ₯˜ => {
console.log(error.response.data.message);
});

```

λˆ„κ΅¬λ“ μ§€ 이것이 μž‘λ™ν•œλ‹€κ³  λ§ν•˜λŠ” μ½”λ“œ 쑰각 μ΄μ™Έμ˜ μ™„μ „ν•œ μž‘λ™ μ˜ˆμ œκ°€ μžˆμŠ΅λ‹ˆκΉŒ? 이 μŠ€λ ˆλ“œμ—μ„œ 그듀이 λˆ„κ΅¬λ₯Ό μ–ΈκΈ‰ν–ˆλŠ”μ§€, μ½”λ“œ 쑰각을 어디에 λ„£μ—ˆλŠ”μ§€, μ΅œμ’… μž‘μ—… μ½”λ“œκ°€ μ–΄λ–»κ²Œ μƒκ²ΌλŠ”μ§€ λͺ¨λ₯Έλ‹€λ©΄ ν•œ μ€„μ˜ 쑰각은 λ³„λ‘œ 도움이 λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” μΈν„°μ…‰ν„°μ—μ„œ 였λ₯˜λ₯Ό 작으렀고 λ…Έλ ₯ν•˜κ³  있으며 였λ₯˜ μ½”λ“œλ₯Ό 기반으둜 401이 λ‘œκ·ΈμΈν•˜λŠ” 경우 λ¦¬λ””λ ‰μ…˜μœΌλ‘œ μš”μ²­μ„ μ’…λ£Œν•˜κ±°λ‚˜ 422κ°€ μš”μ²­μ„ 호좜 ꡬ성 μš”μ†Œλ‘œ λŒμ•„κ°€ 양식 였λ₯˜ μ—…λ°μ΄νŠΈλ₯Ό ν—ˆμš©ν•˜λ„λ‘ ν—ˆμš©ν•©λ‹ˆλ‹€.

μ–΄λ–€ 아이디어?

λ‚˜λŠ” Nuxt axiosλ₯Ό μ‚¬μš©ν•˜κ³  있으며 onResponseError μΈν„°μ…‰ν„°λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

$axios.onResponseError(error => {
    const code = parseInt(error.response && error.response.status)
    console.log(code, 'Axios onResponseError')
    console.log(error.response.status, 'status')
    console.log(error.config, 'config')
    console.log(error.response, 'response')
    // Do something with response error
    if (error.response.status === 401) {
      console.log('unauthorized, logging out ...')
      app.$auth.logout()
      redirect('/login')
    }
    if (code === 400) {
      // redirect('/400')
      console.log(`400 onResponseError`)
    }
    if (code === 408) {
      console.log(`A timeout happened on url onResponseError`)
    }
    if (code === 418) {
      console.log(`A teapot onResponseError`)
    }
    if (code === 428) {
      console.log(`428 onResponseError`)
      // redirect('/login')
    }
    return Promise.reject(error)
  })

μƒ˜ν”Œ ν˜ΈμΆœμ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

async postRecord (clear = false) {
      try {
        const { r } = await this.$axios.$post(this.endPoint, this.formData)
        console.log(r, 'response')
        // do something with response
      } catch (e) {
        console.log(e, 'error in crud') // server response data
        // i should never get here if error since the interceptor should kill the request if 401
       // for testing this request is returning a 401
      } finally {
        this.submitted = false
      }
    },

감사 ν•΄μš”,
데이브

인터넷이 μ—†μœΌλ©΄ error.responseκ°€ μ •μ˜λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이것이 μ΅œμ„ μ˜ λ°©λ²•μž…λ‹ˆκΉŒ?

일반 ν…μŠ€νŠΈμ—μ„œ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€. 개체의 였λ₯˜λ₯Ό λ³€ν™˜ν•˜λ €λ©΄ λ‹€μŒμ„ μ‚¬μš©ν•΄μ•Ό ν–ˆμŠ΅λ‹ˆλ‹€.

var errorObj = JSON.parse(JSON.stringify(error));

이것은 axiosκ°€ μ•„λ‹ˆλΌ μ„œλ²„μ— 달렀 μžˆμŠ΅λ‹ˆλ‹€.
error.response.status, μ •μ˜λ˜μ§€ μ•Šμ€ 경우 μΈν„°λ„·μž„μ„ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.
JS의 μ—°κ²° 문제 λ˜λŠ” ꡬ문 였λ₯˜

2019λ…„ 1μ›” 2일 μˆ˜μš”μΌ, 15:40 Ibrahim Azhar Armar < [email protected]
썼닀:

일반 ν…μŠ€νŠΈλ‘œ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€. 였λ₯˜λ₯Ό λ³€ν™˜ν•˜λ €λ©΄ λ‹€μŒμ„ μ‚¬μš©ν•΄μ•Ό ν–ˆμŠ΅λ‹ˆλ‹€.
객체.

var errorObj = JSON.parse(JSON.stringify(였λ₯˜));

β€”
당신이 λŒ“κΈ€μ„ λ‹¬μ•˜κΈ° λ•Œλ¬Έμ— 이것을 λ°›λŠ” κ²ƒμž…λ‹ˆλ‹€.
이 이메일에 직접 λ‹΅μž₯ν•˜κ³  GitHubμ—μ„œ ν™•μΈν•˜μ„Έμš”.
https://github.com/axios/axios/issues/960#issuecomment-450896476 λ˜λŠ” μŒμ†Œκ±°
μŠ€λ ˆλ“œ
https://github.com/notifications/unsubscribe-auth/AEETt2r3bt2QCixDlzh4fZvWp_1rPkxuks5u_NMEgaJpZM4N9Ljl
.

@kgrosvenor μ„œλ²„ 슀크립트λ₯Ό μ ˆμ „ λͺ¨λ“œλ‘œ μ „ν™˜ν•˜κ³ 

μ˜¬λ°”λ₯Έ 였λ₯˜ λ©”μ‹œμ§€κ°€ ν‘œμ‹œλ˜μ§€λ§Œ μ½˜μ†”μ— 일반 ν…μŠ€νŠΈλ‘œ ν‘œμ‹œλ˜λ―€λ‘œ μ„œλ²„μ™€ 관련이 μ—†λŠ” ν˜•μ‹ 문제만 λ³΄μž…λ‹ˆλ‹€.

κ·Έλ ‡λ‹€λ©΄ μ„œλ²„μ—μ„œ 무엇이 이것을 μΌμœΌν‚¬ 수 μžˆλŠ”μ§€ μ΄ν•΄ν•˜λ €κ³  λ…Έλ ₯ν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ?

μ‹œκ°„ μ΄ˆκ³Όμ— λ„λ‹¬ν–ˆμ„ κ°€λŠ₯성이 ν½λ‹ˆλ‹€. 였λ₯˜μ— '응닡'이 μžˆλŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€.

axios.get()
.then(function(done) {
   //fine and can get done.data
})
.catch(function(err) {
  //catch the error, check it has a response object with lodash 
  if(_.has(err, 'response') {
     console.log(error.response.status);  
     console.log(error.response.data);
 } 
 else {
    console.log("Most likely a server timeout or an internet connection error");
    console.log("error response property is undefined")
 }
}); 

Java ν”„λ‘œκ·Έλž˜λ¨Έκ°€ 500 였λ₯˜κ°€ ν¬ν•¨λœ 였λ₯˜ λ©”μ‹œμ§€λ₯Ό λ³΄λ‚΄λŠ”λ° ν•΄λ‹Ή λ©”μ‹œμ§€λ₯Ό μ²˜λ¦¬ν•  수 μ—†μŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ λ‚˜λŠ” κ·Έμ—κ²Œ μ‘λ‹΅μœΌλ‘œ 였λ₯˜ λ©”μ‹œμ§€μ™€ ν•¨κ»˜ 200 μƒνƒœλ₯Ό λ°˜ν™˜ν•˜λ„λ‘ μš”μ²­ν•˜κ³  μžˆμ§€λ§Œ κ·ΈλŠ” λ‚˜μ—κ²Œ ν™”λ₯Ό λ‚΄λ©° 그의 HTTP ν΄λΌμ΄μ–ΈνŠΈκ°€ 500 μƒνƒœμ˜ λͺ¨λ“  λ©”μ‹œμ§€λ₯Ό λ³Έλ‹€κ³  λ§ν•©λ‹ˆλ‹€. κ·ΈλŠ” λ‚΄κ°€ 500 μƒνƒœμ˜ 였λ₯˜ λ©”μ‹œμ§€λ₯Ό 찾을 수 μ—†κΈ° λ•Œλ¬Έμ— λ‚΄κ°€ 바보라고 μƒκ°ν•©λ‹ˆλ‹€. axiosκ°€ 500 였λ₯˜ λ©”μ‹œμ§€λ₯Ό μ²˜λ¦¬ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것을 μ–΄λ–»κ²Œ μ„€λͺ…ν•©λ‹ˆκΉŒ?

Java ν”„λ‘œκ·Έλž˜λ¨Έκ°€ 500 였λ₯˜κ°€ ν¬ν•¨λœ 였λ₯˜ λ©”μ‹œμ§€λ₯Ό λ³΄λ‚΄λŠ”λ° ν•΄λ‹Ή λ©”μ‹œμ§€λ₯Ό μ²˜λ¦¬ν•  수 μ—†μŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ λ‚˜λŠ” κ·Έμ—κ²Œ μ‘λ‹΅μœΌλ‘œ 였λ₯˜ λ©”μ‹œμ§€μ™€ ν•¨κ»˜ 200 μƒνƒœλ₯Ό λ°˜ν™˜ν•˜λ„λ‘ μš”μ²­ν•˜κ³  μžˆμ§€λ§Œ κ·ΈλŠ” λ‚˜μ—κ²Œ ν™”λ₯Ό λ‚΄λ©° 그의 HTTP ν΄λΌμ΄μ–ΈνŠΈκ°€ 500 μƒνƒœμ˜ λͺ¨λ“  λ©”μ‹œμ§€λ₯Ό λ³Έλ‹€κ³  λ§ν•©λ‹ˆλ‹€. κ·ΈλŠ” λ‚΄κ°€ 500 μƒνƒœμ˜ 였λ₯˜ λ©”μ‹œμ§€λ₯Ό 찾을 수 μ—†κΈ° λ•Œλ¬Έμ— λ‚΄κ°€ 바보라고 μƒκ°ν•©λ‹ˆλ‹€. axiosκ°€ 500 였λ₯˜ λ©”μ‹œμ§€λ₯Ό μ²˜λ¦¬ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것을 μ–΄λ–»κ²Œ μ„€λͺ…ν•©λ‹ˆκΉŒ?

μ‹€μ œλ‘œ μƒνƒœ 500의 였λ₯˜λ₯Ό μ²˜λ¦¬ν•  수 μžˆμ–΄μ•Ό ν•˜λ©° μ‘λ‹΅μœΌλ‘œ http μƒνƒœλ₯Ό ν™•μΈν•˜κ³  ν΄λΌμ΄μ–ΈνŠΈ μΈ‘μ—μ„œ μ²˜λ¦¬ν•˜λŠ” 방법을 κ²°μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이것은 이미 이 링크(https://github.com/axios/axios#handling-errors)에 λ¬Έμ„œν™”λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

λ‹€μŒμ€ μ„œλ²„μ—μ„œ 였λ₯˜ 500을 μž‘λŠ” 방법이며 μ €μ—κ²Œ νš¨κ³Όμ μž…λ‹ˆλ‹€.

.catch(function (error) {
    var errorObj = JSON.parse(JSON.stringify(error));
    console.log(errorObj);
    if (errorObj.code == 'ECONNABORTED') {
        alert('Connection timed out.');
    }
});

상관없이 500 μƒνƒœλ₯Ό μ²˜λ¦¬ν•  수 μžˆμ§€λ§Œ 제 μƒκ°μ—λŠ” μ„œλ²„ μΈ‘μ—μ„œ μ˜λ„μ μœΌλ‘œ 그것을 λ°˜ν™˜ν•˜λŠ” 것은 κ½€ λ‚˜μœ μŠ΅κ΄€μž…λ‹ˆλ‹€...

λ˜ν•œ error.response undefinedκ°€ ν‘œμ‹œλ˜κ³  μ•„λž˜ μ½”λ“œλ₯Ό μ‹œλ„ν•©λ‹ˆλ‹€.

axios.interceptors.response.use(function (response) {
  return response;
}, function (error) {
  // Do something with response error
  let {response} = error;
  // response?.status === 401 es7 way.
  if (response && response.status === 401) {
    // Do logout;
    // Redirect to login;
    return Promise.reject(error.response);
  } 
  else if (error.response){
    // Do something.
    console.log('some API_CLIENT error');
    return Promise.reject(error.response);
  }
 return Promise.reject(error);
});

이것은 λ„ˆλ¬΄ λ‚˜μ©λ‹ˆλ‹€. 였λ₯˜ μ²˜λ¦¬κ°€ μ€‘μš”ν•©λ‹ˆλ‹€.

μ§€κΈˆμ€ μ–΄λ–»κ²Œ 되고 μžˆλ‚˜μš”? 버전 0.18.0μ—μ„œ μ—¬μ „νžˆ λ™μΌν•œ λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€!

λ‚˜μ—κ²Œ 같은 문제: @nuxtjs/axios v5.0.0

λ²„κ·Έμž…λ‹ˆλ‹€

Daniel Stern [email protected]于 2019εΉ΄2月28ζ—₯周四 04:39ε†™ι“οΌš

이 토둠을 μš”μ•½ν•˜κ² μŠ΅λ‹ˆλ‹€.

박사:
EVERYONE HTTP 였λ₯˜λ₯Ό μž‘μ„ 수 μ—†λ‹€λŠ” 것이 λ¬Έμ œμž…λ‹ˆλ‹€.
개발자 HTTP 였λ₯˜λ₯Ό μž‘μ„ 수 μ—†λŠ” 것은 λ¬Έμ œκ°€ μ•„λ‹™λ‹ˆλ‹€ .

β€”
당신이 λŒ“κΈ€μ„ λ‹¬μ•˜κΈ° λ•Œλ¬Έμ— 이것을 λ°›λŠ” κ²ƒμž…λ‹ˆλ‹€.
이 이메일에 직접 λ‹΅μž₯ν•˜κ³  GitHubμ—μ„œ ν™•μΈν•˜μ„Έμš”.
https://github.com/axios/axios/issues/960#issuecomment-468020991 λ˜λŠ” μŒμ†Œκ±°
μŠ€λ ˆλ“œ
https://github.com/notifications/unsubscribe-auth/AAN8CbMHohyuSZHYlcieD_5yUqizpkSYks5vRuzygaJpZM4N9Ljl
.

READMEμ—μ„œ 이 문제λ₯Ό μ–ΈκΈ‰ν•΄μ•Ό ν•©λ‹ˆλ‹€. 맀우 도움이 λ©λ‹ˆλ‹€. 감사 ν•΄μš”!

https://github.com/axios/axios/issues/960#issuecomment -320659373

λ‹€λ₯Έ ν¬μŠ€ν„°μ— λ™μ˜ν•©λ‹ˆλ‹€. 였λ₯˜κ°€ λ°œμƒν•˜λŠ” 지점에 따라 catch 에 μ˜ˆμΈ‘ν•  수 μ—†λŠ” ꡬ쑰의 개체λ₯Ό λΆ€μ—¬ν•˜λŠ” 것은 쒋지 μ•ŠμŠ΅λ‹ˆλ‹€. error.response 및 JSON.stringify(error) λͺ¨λ‘ 원인에 따라 자체적으둜 였λ₯˜κ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. https://github.com/axios/axios#handling -errorsμ—μ„œ μ œμ•ˆλœ μ ‘κ·Ό 방식도 이에 λŒ€ν•΄ μ •ν™•νžˆ μ•Œλ €μ£Όμ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λ”μ°ν•œ 였λ₯˜ λ©”μ‹œμ§€λ₯Ό λ°˜ν™˜ν•˜κΈ° μœ„ν•΄ 이 λͺ¨λ“  곑예λ₯Ό μˆ˜ν–‰ν•΄μ•Ό ν•˜λŠ” 것은 2019년에 λ‹Ήν˜ΉμŠ€λŸ¬μ› μŠ΅λ‹ˆλ‹€. 1990λ…„μ—λŠ” λ‹Ήν˜ΉμŠ€λŸ¬μ› μ„ κ²ƒμž…λ‹ˆλ‹€. μ§„μ§€ν•˜κ²Œ JS μ‚¬λžŒλ“€, κ²Œμž„μ„ κ°•ν™”ν•˜μ‹­μ‹œμ˜€. API 섀계λ₯Ό 배우고 μ˜λ„μ μœΌλ‘œ λ¬΄μ‹œν•˜κ³  μžˆλŠ” ν˜Όλž€μ„ λ””λ²„κΉ…ν•˜λŠ” 데 수천 λͺ…μ˜ μ‚¬λžŒλ“€μ΄ μˆ˜λ§Žμ€ μ‹œκ°„μ„ μ†ŒλΉ„ν•˜λŠ” '창의적인 κ²°μ •' λΉ„μš©μ„ μΈμ‹ν•˜μ‹­μ‹œμ˜€.

μˆœν™˜ 참쑰둜 어렀움을 κ²ͺλŠ” μ‚¬λžŒλ“€μ„ μœ„ν•΄ λ‹€μŒκ³Ό 같이 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

try {
// your axios request
} catch (error) {
  const { response } = error;
  const { request, ...errorObject } = response; // take everything but 'request'
  res.status(response.status);
  return res.json(errorObject); // or use 'return res.json(response.data.error);' then you don't need to omit the 'request'
}

μˆœν™˜ 참쑰둜 어렀움을 κ²ͺλŠ” μ‚¬λžŒλ“€μ„ μœ„ν•΄ λ‹€μŒκ³Ό 같이 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

try {
// your axios request
} catch (error) {
  const { response } = error;
  const { request, ...errorObject } = response; // take everything but 'request'
  res.status(response.status);
  return res.json(errorObject); // or use 'return res.json(response.data.error);' then you don't need to omit the 'request'
}

κ³ λ§ˆμ›Œμš”! 그것은 λ‚˜λ₯Ό μœ„ν•΄ 잘 μž‘λ™ν•˜λŠ” μ½”λ“œμž…λ‹ˆλ‹€.

λ¬Έμ œλŠ” "lib/core/enhanceError"에 μžˆμŠ΅λ‹ˆλ‹€. μš”μ²­ κ°œμ²΄κ°€ 였λ₯˜μ— μΆ”κ°€λ©λ‹ˆλ‹€. Promise 기반 APIμ—λŠ” ν•˜λ‚˜μ˜ λ§€κ°œλ³€μˆ˜λ§Œ μžˆμœΌλ―€λ‘œ 닡변에 응닡을 μΆ”κ°€ν•˜λŠ” 것이 ν•©λ¦¬μ μž…λ‹ˆλ‹€(μš”μ²­ λΌμ΄λΈŒλŸ¬λ¦¬λŠ” 첫 번째 λ§€κ°œλ³€μˆ˜λ‘œ 였λ₯˜λ₯Ό λ°˜ν™˜ν•˜κ³  두 번째 λ§€κ°œλ³€μˆ˜λ‘œ 응닡을 λ°˜ν™˜ν•¨). κ·ΈλŸ¬λ‚˜ λͺ¨λ“  μš”μ²­μ„ μΆ”κ°€ν•˜λŠ” 것은 μ˜λ―Έκ°€ μ—†μŠ΅λ‹ˆλ‹€. μ½”λ“œ 변경은 맀우 κ°„λ‹¨ν•©λ‹ˆλ‹€ https://github.com/geoblink/axios/pull/1/files
μ€‘μš”ν•΄ λ³΄μ΄λŠ” 경우 메인 λΈŒλžœμΉ˜μ— λŒ€ν•œ 홍보λ₯Ό μ—΄ 수 μžˆμŠ΅λ‹ˆλ‹€(λ¬Έμ œκ°€ μ’…λ£Œλ˜μ—ˆκΈ° λ•Œλ¬Έμ— μˆ˜ν–‰ν•˜μ§€ μ•ŠμŒ).

μš”μ²­ν•  λ•Œλ§ˆλ‹€ ν˜ΈμΆœν•  ν•¨μˆ˜ 래퍼λ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

const api = async (uri, data) => {
  try {
    const { data: response } = await axios({
      url: domain + uri,
      method: 'POST',
      data,
    });

    return response.data;
  } catch (error) {
    throw error.response.data;
  }
};

μ‹œκ°„ μ΄ˆκ³Όμ— λ„λ‹¬ν–ˆμ„ κ°€λŠ₯성이 ν½λ‹ˆλ‹€. 였λ₯˜μ— '응닡'이 μžˆλŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€.

axios.get()
.then(function(done) {
   //fine and can get done.data
})
.catch(function(err) {
  //catch the error, check it has a response object with lodash 
  if(_.has(err, 'response') {
     console.log(error.response.status);  
     console.log(error.response.data);
 } 
 else {
    console.log("Most likely a server timeout or an internet connection error");
    console.log("error response property is undefined")
 }
}); 

이것은 λ‚˜λ₯Ό μœ„ν•΄ μΌν–ˆμŠ΅λ‹ˆλ‹€. κ°μ‚¬ν•©λ‹ˆλ‹€

"error.response"λ₯Ό μ‚¬μš©ν•˜λ©΄ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ¬Έμ œλŠ” λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ˜ 연결을 끊고 μ›Ή μ„œλ²„μ—μ„œ 였λ₯˜ 500을 λ°˜ν™˜ν–ˆμ„ λ•Œ λ°œμƒν•©λ‹ˆλ‹€.

개발 λ„κ΅¬μ˜ λ„€νŠΈμ›Œν¬ νƒ­

응닡 μ½”λ“œ: 500
응닡 λ³Έλ¬Έ:

{
  "error": {
    "statusCode": 500,
    "name": "Error",
    "message": "read ETIMEDOUT",
    "code": "ETIMEDOUT",
    "errno": "ETIMEDOUT",
    "syscall": "read",
    "stack": "Error: read ETIMEDOUT\n    at exports._errnoException (util.js:1050:11)\n    at TCP.onread (net.js:582:26)"
  }
}

크둬 μ½˜μ†” 였λ₯˜:

Uncaught (in promise) Error: Request failed with status code 500
    at createError (createError.js:15)
    at settle (settle.js:18)
    at XMLHttpRequest.handleLoad (xhr.js:77)

버전

"axios": "^0.15.3"

여기도 λ§ˆμ°¬κ°€μ§€...

λ‚΄ κ²½ν—˜μƒ:

"catchμ—μ„œ console.log(error)μ—μ„œ console.log(error.response)둜 μˆ˜μ •ν•©λ‹ˆλ‹€."

catchμ—μ„œ console.log(error.response.data)와 ν•¨κ»˜ 더 잘 μž‘λ™ν–ˆμŠ΅λ‹ˆλ‹€.

axios.interceptors.response.use(null, 였λ₯˜ => {
λ°˜ν™˜ error.response;
});

getClients: 비동기(μƒνƒœ) => {
const res = axios.get( ${BASE_API}/clients )을 κΈ°λ‹€λ¦½λ‹ˆλ‹€.
console.log('res',res);
λ§Œμ•½ (res){
state.commit("setClient", res.data);
}
}

λ‹€λ₯Έ μ˜΅μ…˜

/**
 * Whenever error.message is accessed we want to se the full API error message (JSON) if it's present
 * not just some generic http status code + message
 * see https://github.com/axios/axios/issues/960 for context
 *
 * <strong i="6">@param</strong> axios
 */
export function extractAPIErrorResponse(axios: AxiosInstance) {
    axios.interceptors.response.use(undefined, function (error: AxiosError) {
        (error as any).originalMessage = error.message;
        Object.defineProperty(error, "message", { get: function () {
            if (!error.response) {
                return (error as any).originalMessage;
            }
            return JSON.stringify(error.response.data);
        }});
        return Promise.reject(error);
    })
}

λ…Έλ ₯ν•˜λ‹€{
κΈ°λ‹€λ¦¬μ„Έμš”.$axios .....
}캐치(e)
{
console.log(e)

}

axios.get("https://......") 
     .then( response => {
          return response
}).catch( () => {
         store.dispatch("errorComponentMethod")   // if there's an error, method is dispatched
})
//////////////////////////////////////
actions : {
      errorComponentMethod(){
              router.push("/errorComponent")     // method routes to error component
      }
}

κ°μ‚¬ν•©λ‹ˆλ‹€! λ§Žμ€ 도움이 λ˜μ—ˆμŠ΅λ‹ˆλ‹€!

μ—¬μ „νžˆμ΄ λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€. 크둬 λ””λ²„κ±°μ—μ„œ 응닡은 μ •ν™•ν•˜μ§€λ§Œ axiosλŠ” λŒ€μ‹  일반 "Request failed with status code 403" λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

λ‚˜λŠ” 아직도 이것을 가지고 있고 λ‚˜λŠ” μ •λ§λ‘œ ν˜Όλž€μŠ€λŸ½λ‹€. μœ„μ˜ 주석을 작으렀고 ν–ˆμ§€λ§Œ 였λ₯˜κ°€ μžˆμ„ λ•Œ μ •ν™•νžˆ axiosκ°€ undefinedλ₯Ό λ°˜ν™˜ν•˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?
try{ const res = await axios.get("someurl"); return res; } catch(e) { console.log(e); }
μ„œλ²„κ°€ μ‘λ‹΅ν•˜μ§€ μ•ŠλŠ” μ΄μœ μ— λŒ€ν•œ λ©”μ‹œμ§€κ°€ ν¬ν•¨λœ 응닡을 λ‹€μ‹œ 보내더라도 resλŠ” μ •μ˜λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 그리고 λ‚˜λŠ” κ·Έ 데이터에 μ ‘κ·Όν•  수 μ—†λ‹€... μ™œ??

**νŽΈμ§‘: λ‚΄ 버그λ₯Ό μ°Ύμ•˜μŠ΅λ‹ˆλ‹€ - axios에 λŒ€ν•΄μ„œλŠ” μ•„λ¬΄λŸ° λ¬Έμ œκ°€ μ—†μŠ΅λ‹ˆλ‹€. λ‚΄ 의견 두 개 μ•„λž˜λ‘œ μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€. μš”μ»¨λŒ€ λ‚΄ μΈν„°μ…‰ν„°λŠ” axios νŒŒμ΄ν”„λΌμΈμ„ 톡해 였λ₯˜ 데이터λ₯Ό λ‹€μ‹œ μ „λ‹¬ν•˜μ§€ μ•Šμ•˜μœΌλ―€λ‘œ 항상 μ •μ˜λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

@HoogsterInc μ—¬κΈ° μ—μ„œ
당신은 이런 일을 ν•  수 μžˆμŠ΅λ‹ˆλ‹€

try {
   axios.get(...)
} catch (error) {
   if (error.reponse) {
      // http status 4x, 5xx
   } else {
      // network error like timeout, connection refused etc...
   }
}

@konstantinblaesi λ₯Ό 돕기 μœ„ν•œ 응닡에 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€ -- 제 문제λ₯Ό νŒŒμ•…ν–ˆμŠ΅λ‹ˆλ‹€.

λ‚˜λ₯Ό μœ„ν•΄ λ‚˜λŠ” μ‚¬μš©μžμ˜ 인증을 ν™•μΈν•˜κΈ° μœ„ν•΄ 인터셉터λ₯Ό μ„€μ •ν–ˆλŠ”λ°, μ‚¬μš©μžκ°€ μΈμ¦λ˜μ§€ μ•Šμ€ 경우 νŠΉμ • 였λ₯˜ μ½”λ“œλ₯Ό λ³΄λƒ…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 였λ₯˜κ°€ μΈμ¦λ˜μ§€ μ•Šμ€ μ½”λ“œμ™€ μΌμΉ˜ν•˜μ§€ μ•Šμ„ λ•Œ 였λ₯˜ 데이터λ₯Ό μ „λ‹¬ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. ν•œμˆ¨... 어리석은 λ‚˜μœ μ‹€μˆ˜. κ·Έλž˜μ„œ μΈμ¦λ˜μ§€ μ•Šμ€ 였λ₯˜ μ½”λ“œλ₯Ό ν™•μΈν•œ ν›„ Promise.reject(error); - λ‚΄ λ¬Έμ œκ°€ ν•΄κ²°λ˜μ—ˆκ³  였λ₯˜ 데이터가 이제 가득 μ°ΌμŠ΅λ‹ˆλ‹€.

err.toJSON() μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

catch((err) => {
    console.log(err.toJSON()); // Return error object
});

https://github.com/axios/axios#handling - 였λ₯˜

(κΈ€λ‘œλ²Œλ‘œ μ„€μ •)

main.jsμ—μ„œ

import axios from 'axios'

var instance = axios.create(
 { validateStatus: function (status) {
    return status < 600; #you can change this with another value
  }
 });

λ˜λŠ”
(νŠΉμ •ν•˜κ²Œ μ„€μ •)

  axios.post('/formulas/create', {
       name: "",
       parts: ""
  }, { validateStatus: function (status) {
          return status < 600; // Reject only if the status code is greater than or equal to 500
        }})
    .then( 
   (response) => { console.log(response) },
   (error) => { console.log(error) }
   );

Axios 및 catch 500 였λ₯˜ 응닡 데이터

const log = console.log;

  updateData(options = {}, flag = false){
    let url = `/opapi/appDownloadGuide/update`;
    let message = 'ζ›΄ζ–°ζˆεŠŸ!';
    let errorMessage = 'ζ›΄ζ–°ε€±θ΄₯!';
    if (flag) {
      message = '添加成功!';
      errorMessage = '添加倱θ΄₯!';
      url = `/opapi/appDownloadGuide/add`;
    }
    axios
    .post(url, options)
    .then(res => {
      // β“πŸ€”οΈ500 , εœ¨θΏ™ι‡Œζ‹¦δΈδ½ε‘€οΌŸ
      log(`res`, res, res.status);
      return res.data;
    })
    .then(json => {
      const {
        code,
        success,
        data,
        errorCode,
        errorHint,
      } = json;
      if(code === 200) {
        this.$message({
          type: 'success',
          message,
        });
        this.init();
      } else{
        this.$message({
          type: 'error',
          message: `${errorMessage}: ${errorHint ? errorHint : ""}`,
        });
      }
    })
    .catch(err => {
      // πŸ‘Œεœ¨θΏ™ι‡Œζ‹¦ζˆͺ error data!
      log(`error.response`, err.response);
      const {
        data,
        status,
        statusText,
      } = err.response;
      this.$message({
        type: "error",
        message: `${statusText}-${status}: ${data || ""}`,
        // message: "δΈθƒ½ι‡ε€εˆ›ε»Ί",
      });
      console.error(`500 err`, err);
    });
  },

https://stackoverflow.com/questions/38798451/how-to-catch-and-handle-error-response-422-with-redux-axios

λ‚˜λŠ” μ •ν™•νžˆ 같은 ν™˜κ²½μ„ κ°€μ§€κ³ μžˆλ‹€. 이 μ‹œλ„:

axios.post('/formulas/create', {
  name: "",
  parts: ""
})
.then(response => { 
  console.log(response)
})
.catch(error => {
    console.log(error.response)
});

μ—μ„œ _Modify console.log(error) 에 console.log(error.response) μ—μ„œ catch _.

μ „μ—­ 인터셉터λ₯Ό μ‚¬μš©ν•˜κ³  error.response 만 κ±°λΆ€ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. λ¬Έμ œλŠ” console.log κ°€ 였λ₯˜λ₯Ό 좜λ ₯ν•˜λ €κ³  ν•  λ•Œ 개체 ꡬ쑰가 μ•„λ‹Œ λ¬Έμžμ—΄ ν‘œν˜„μ΄ μΈμ‡„λ˜μ–΄ .response 속성이 ν‘œμ‹œλ˜μ§€ μ•ŠλŠ”λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

λ‚˜λ₯Ό μœ„ν•΄ μΌν•˜μ§€ μ•ŠλŠ”λ‹€

@gopal-g μ €μ—κ²Œ μ •μ˜λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

@gopal-g 예 λ™μΌν•œ μ •μ˜λ˜μ§€ μ•Šμ€ λ©”μ‹ μ €κ°€ κ°€μ Έμ˜΅λ‹ˆλ‹€.

μ €λŠ” Axios 0.19.2λ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. @konstantinblaesi 의 μ†”λ£¨μ…˜μ„ μΆ”κ°€

λ‹€λ₯Έ μ˜΅μ…˜

/**
 * Whenever error.message is accessed we want to se the full API error message (JSON) if it's present
 * not just some generic http status code + message
 * see https://github.com/axios/axios/issues/960 for context
 *
 * <strong i="9">@param</strong> axios
 */
export function extractAPIErrorResponse(axios: AxiosInstance) {
    axios.interceptors.response.use(undefined, function (error: AxiosError) {
        (error as any).originalMessage = error.message;
        Object.defineProperty(error, "message", { get: function () {
            if (!error.response) {
                return (error as any).originalMessage;
            }
            return JSON.stringify(error.response.data);
        }});
        return Promise.reject(error);
    })
}

이것은 μ €μ—κ²Œ νš¨κ³Όμ μ΄μ—ˆμŠ΅λ‹ˆλ‹€ .

λΆ„λͺ…νžˆ ν•˜μžλ©΄ λ‚΄ μ•±μ—μ„œ λ‚΄ μ„œλ²„κ°€ 400 였λ₯˜λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€(응닡해야 함).

% curl -X POST http://my-server/api -d '{"foo": "bar"}'
{"status": 400, "message": "missing param XYZ"}

이 μˆ˜μ • 사항이 μ—†μœΌλ©΄ Axiosμ—μ„œ name , stack , config (μ›λž˜ μš”μ²­μ΄ 있음)만 ν¬ν•¨ν•˜κ³  "응닡"이 μ—†λŠ” 였λ₯˜ 개체λ₯Ό μ–»μŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 이 μˆ˜μ •μœΌλ‘œ 였λ₯˜μ—λŠ” μ„œλ²„μ˜ μ˜¬λ°”λ₯Έ message 속성이 ν¬ν•¨λ©λ‹ˆλ‹€.

이 μˆ˜μ • 사항이 μ—†μœΌλ©΄ "response" 속성이 μ—†λŠ” μ΄μœ λŠ” 1171번째 쀄에 μžˆλŠ” axios.js의 settle 와 κ΄€λ ¨λœ 것 κ°™μŠ΅λ‹ˆλ‹€.

        module.exports = function settle(resolve, reject, response) {
          var validateStatus = response.config.validateStatus;
          if (!validateStatus || validateStatus(response.status)) {
            resolve(response);
          } else {
            reject(createError(
              'Request failed with status code ' + response.status,
              response.config,
              null,
              response.request,
              response
            ));
          }
        };

였λ₯˜λ₯Ό 생성할 λ•Œ response.message ν†΅κ³Όν•˜μ§€ μ•ŠλŠ” 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ λ‚΄ μ•±μ—μ„œ error.response 응닡이 ν‘œμ‹œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 그런 속성이 μ—†μŠ΅λ‹ˆλ‹€. 이해가 λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ–΄μ¨Œλ“  μœ„μ˜ μˆ˜μ • 사항은 μ €μ—κ²Œ νš¨κ³Όμ μž…λ‹ˆλ‹€.

μ„œλ²„μ—μ„œ μœ νš¨μ„± 검사 였λ₯˜λ₯Ό 작으렀고 ν•©λ‹ˆλ‹€.

μ•”ν˜Έ:

axios.post('/formulas/create', {
       name: "",
       parts: ""
})
.then( 
  (response) => { console.log(response) },
  (error) => { console.log(error) }
);

μ½˜μ†” 둜그 좜λ ₯

Error: Request failed with status code 422
    at createError (app.js:6765)
    at settle (app.js:29489)
    at XMLHttpRequest.handleLoad (app.js:6600)

λ„€νŠΈμ›Œν¬ νƒ­ 좜λ ₯
{"name":["이름 ν•„λ“œλŠ” ν•„μˆ˜μž…λ‹ˆλ‹€."],"parts":["λΆ€ν’ˆ ν•„λ“œλŠ” ν•„μˆ˜μž…λ‹ˆλ‹€."]}

λ‚΄ λ„€νŠΈμ›Œν¬ νƒ­μ˜ 응닡인 JSON 양식 μœ νš¨μ„± 검사가 ν¬ν•¨λœ κ°œμ²΄κ°€ ν‘œμ‹œλ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. JS catch 좜λ ₯을 μ–»λŠ” 것 κ°™μŠ΅λ‹ˆκΉŒ?

λ˜ν•œ λ‹€μŒμ„ μ‹œλ„ν–ˆμŠ΅λ‹ˆλ‹€.

axios.post('/formulas/create', {
  name: "",
  parts: ""
})
.then(response => { 
  console.log(response)
})
.catch(error => {
    console.log(error)
});

같은 κ²°κ³Ό

μ—¬κΈ° λ‚˜μ™€ 같은 ν™˜κ²½μ„ μ‚¬μš©ν•˜λ©΄μ„œ 더 λ§Žμ€ μ‚¬λžŒλ“€μ΄ 같은 문제λ₯Ό κ²ͺκ³  μžˆλŠ” 것 κ°™λ‹€.
https://laracasts.com/discuss/channels/vue/issues-with-axios-catch-method

  • Axios 버전: ^0.16.2
  • λ·°JS 2.3.4
  • Vue ν…œν”Œλ¦Ώ 컴파일러 2.3.4
  • 라라벨 믹슀
  • ν™˜κ²½: λ…Έλ“œ v6.4.0, 크둬 58, Mac OSX 10.12.4

axios.post('/곡식/λ§Œλ“€κΈ°', {
이름: "",
뢀속: ""
})
.κ·Έ λ‹€μŒμ—(
(응닡) => { console.log(응닡) },
).catch(err => consol.log(err.response.data)});

error.responseλŠ” 객체이며 μ½˜μ†” λ‘œκ·Έμ— [객체,객체]λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.
였λ₯˜ λ©”μ‹œμ§€μ— μ•‘μ„ΈμŠ€ν•˜λ €λ©΄ error.reposne.dataλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.
μ°Έμ‘° : https://itnext.io/javascript-error-handling-from-express-js-to-react-810deb5e5e28

@chandukasm 예, ν•˜μ§€λ§Œ 제 κ²½μš°μ—λŠ” error.response _μ—†μŠ΅λ‹ˆλ‹€_ -- μš”μ²­μ΄ μ „μ†‘λ˜κ³  응닡이 λͺ…μ‹œμ μœΌλ‘œ μˆ˜μ‹ λ˜λ”λΌλ„ μ •μ˜λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ˜ν•œ μœ„μ˜ λ‚΄ μ˜κ²¬μ„ μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€. 응닡이 μ‘΄μž¬ν•˜λ”λΌλ„ λ©”μ‹œμ§€λŠ” λ¬΄μ‹œλ©λ‹ˆλ‹€(일반 λ©”μ‹œμ§€λ‘œ λŒ€μ²΄λ¨).

error.responseλŠ” 객체이며 μ½˜μ†” λ‘œκ·Έμ— [객체,객체]λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.
였λ₯˜ λ©”μ‹œμ§€μ— μ•‘μ„ΈμŠ€ν•˜λ €λ©΄ error.reposne.dataλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.
μ°Έμ‘° : https://itnext.io/javascript-error-handling-from-express-js-to-react-810deb5e5e28

console.log에 [object,object]κ°€ 보이면 JSON.stringify(error.response)λ₯Ό μ‹€ν–‰ν•˜μ—¬ μ‹€μ œ 였λ₯˜λ₯Ό ν™•μΈν•˜μ‹­μ‹œμ˜€.

error.response κ°œμ²΄κ°€ μ—†μŠ΅λ‹ˆλ‹€.

return this.$axios
  .post(postUrl, payload, { responseType: 'json' })
  .then(
    (response) => {
      this.message = `RESP: ${JSON.stringify(response)}`;
    },
    (reason) => {
      this.message = `REAS: ${JSON.stringify(reason)}`;
    }
  )
  .catch((err) => {
    this.message = `CATCH: ${JSON.stringify(err)}`;
  });

νŽ˜μ΄λ‘œλ“œμ—λŠ” HTTP 422λ₯Ό νŠΈλ¦¬κ±°ν•˜κΈ° μœ„ν•΄ μ˜λ„μ μœΌλ‘œ 잘λͺ»λœ 값이 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 이 값은 Postmanμ—μ„œ μ˜ˆμƒλŒ€λ‘œ μž‘λ™ν•˜κ³  μ„œλ²„(LB4)κ°€ μž…λ ₯ 데이터가 잘λͺ»λœ μœ„μΉ˜λ₯Ό μ„€λͺ…ν•˜λŠ” JSON ν˜•μ‹μ˜ μ™„μ „ν•œ 였λ₯˜λ₯Ό λ°˜ν™˜ν•˜μ§€λ§Œ axiosμ—μ„œλŠ” error.response 객체가 μ •μ˜λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. .

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰