ãŠãŒã¶ãŒã«é©åãªãšã©ãŒã¡ãã»ãŒãžã衚瀺ã§ããããã«ããµãŒããŒãããŠã³ããŠããããšãæ€åºããããšããŠããŸãã
ãã®å Žåãaxiosãããã¯ãŒã¯ãªã¯ãšã¹ãã¯ãããã§èª¬æãããŠããããã«ãä»ã®ãã¹ãŠã®axiosãšã©ãŒãšã¯ç°ãªããšã©ãŒãã¹ããŒããŸãïŒ https ïŒ
ç§ã®ã³ãŒãã§ã¯ããã®ãšã©ãŒãæ€åºããå¯äžã®æ¹æ³ã¯err.messageããã§ãã¯ããããšã ãšæãããŸãã
if (err.message === "Network Error"){/*tell user the server is down*/}
æååã®æ¯èŒã¯å°ãå±éºãªã®ã§ãããã¯ç§ãæ©ãŸããŸãã ãããããã€ããã®ã¡ãã»ãŒãžã翻蚳ãããç§ã®ã³ãŒãã¯å€±æããã§ãããã
err.statusãŸãã¯err.codeïŒãŸãã¯errã???ïŒããã³ãŒãã§ç¢ºèªã§ããææžåãããå€ã«èšå®ãããŠãããšäŸ¿å©ã§ãã
ç§ãèŠéããŠãããã®ã·ããªãªãæ€åºããä»ã®æ¹æ³ã¯ãããŸããïŒ
çããããããšãïŒ
ç§ã¯ããªããæ£ãããšæããŸãã ã¹ããŒã¿ã¹ã³ãŒãã¯çã«ããªã£ãŠããŸãã
ïŒ204ã§èª°ããèšã£ãããã«ããã©ãŠã¶ã§ãããã¯ãŒã¯ãšã©ãŒããã£ããã§ããªãå ŽåããããããAxiosã¯äžè¬çãªãšã©ãŒïŒ new Error('Network error')
ïŒã§å¿çããŸãã ããããæªãå¿çïŒã¹ããŒã¿ã¹ã³ãŒãïŒ== 2xxãŸãã¯ã«ã¹ã¿ã ãã§ãã¯ïŒãšåºå¥ãããå Žåã¯ããšã©ãŒã¡ãã»ãŒãžã®ä»£ããã«status
ããããã£ããã§ãã¯ããã®ãæåã®æ¹æ³ã ãšæããŸãã äŸãã°ïŒ
axios.request(options).catch(function(error) {
if (!error.status) {
// network error
}
});
ã«ã¹ã¿ã ã¹ããŒã¿ã¹ã³ãŒããèšå®ããããšã¯æªãèãã§ããïŒæ··ä¹±ãæãå¯èœæ§ããããŸãïŒãç¹å®ã®ããããã£ãèšå®ããŠãããšã©ãŒã±ãŒã¹ã1ã€ãããªãããããŸã£ãã圹ã«ç«ã¡ãŸããã
ãã¡ãããå®éã®ãšã©ãŒã«ã¢ã¯ã»ã¹ã§ããNode.jsã®ããã¥ã¡ã³ãã«åŸã£ãŠç¢ºèªã§ãããããNode.jsã®æ¹ãç°¡åã§ãã
ãããAxiosåŒã³åºãã«ãã£ãŠã¹ããŒããããšã©ãŒã¯ã1ïŒã¹ããŒã¿ã¹ããããã2ïŒäžè¬çãªãããã¯ãŒã¯ãšã©ãŒã§ããããšãä¿èšŒãããŠããŸããïŒ ããã§ååã ãšæããŸãã
ãããŸã§ã®ãšããã404,500 ..ã®ãããªãšã©ãŒã³ãŒããååŸã§ããŸãããããã§ãããããã¯ãŒã¯ãšã©ãŒãçºçããŸãã ããã解決ããæ¹æ³ã¯ïŒ
instance.postïŒ '/ foo'ã{request_idïŒ12345}ïŒ
.thenïŒfunctionïŒresponseïŒ{}ïŒ
.catchïŒfunctionïŒerrorïŒ{
console.logïŒãšã©ãŒïŒ; // ãããã¯ãŒã¯ãšã©ãŒ
console.logïŒerror.statusïŒ; // æªå®çŸ©
console.logïŒerror.codeïŒ; // æªå®çŸ©
}ïŒ;
ãããã¯ãŒã¯ãšã©ãŒã¯ãAxiosããµãŒããŒã«ãŸã£ããæ¥ç¶ã§ããªãã£ãããããµãŒããŒãããšã©ãŒã³ãŒããååŸã§ããªãããšãæå³ããŸãã ãã¶ããå¥ã®ããŒã«ïŒcurlãpostmanããŸãã¯ãã©ãŠã¶ãŒïŒã§è©ŠããŠãæ¥ç¶ã§ããããšã確èªããŸããïŒ
ãµãŒããŒã«æ¥ç¶ã§ããŸããå®éã«ã¯404ãšã©ãŒã³ãŒããè¿ãããä»ã®APIåŒã³åºãã§ã¯ãµãŒããŒã¯500å éšãµãŒããŒãšã©ãŒãè¿ããŸãããããã§ãã¹ã¯ãªããïŒieãconsole.logïŒ error.statusïŒ; //æªå®çŸ©ïŒã
error.response.status
ãŸãã
ãã®åé¡ãçºçããŠããŸãã 誰ãå©ããŠãããŸãããïŒ
ãµãŒããŒã®å¿çã¯401ã§ãããaxiosã¯ãããæäŸããŸãã
ãšã©ãŒ->ããããã¯ãŒã¯ãšã©ãŒã
error.response->æªå®çŸ©
error.status->æªå®çŸ©
ãšã©ãŒãããããã¯ãŒã¯ãšã©ãŒãã®å ŽåãAxiosããµãŒããŒã«æ¥ç¶ã§ããªãããäœããã®çç±ã§ãµãŒããŒããå¿çãåŸãããªãããšãæå³ããŸãã ãã®ããã401ãšã©ãŒãAxiosã«çµã¿èŸŒãŸããããšã¯ãããŸããã ãã¶ããStackOverflowã«ããã€ãã®ãµã³ãã«ã³ãŒãã§è³ªåãæçš¿ããŸããïŒ
AWS API-Gatewayã䜿çšããŠãããšãã«ãããã«ééããŸããã åãåé¡ãçºçããŠããå Žåã¯ã4xxãšã©ãŒïŒç§ã®å Žåã¯401ïŒãCORSããããŒã§å¿çããªããšããåé¡ã§ãã ãã®ããŸããŸããåé¡ã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°ã«äœæéãè²»ãããŸããïŒ ãã©ãã«ã·ã¥ãŒãã£ã³ã°ãæ£ããæ¹åã«åããŠããã@ jonathan-stoneã«æè¬ããŸãã
@codygreenç§ã¯ãŸã ãã®åé¡ãæ±ããŠãããããã«ééããŸããhttps://forums.aws.amazon.com/message.jspa?messageID=763752
åé¿çãèŠã€ããŸãããïŒ
誰ãããã®åé¡ã®è§£æ±ºçãæã£ãŠããŸããïŒ
ç§ã®åé¡ã¯Jest + Axiosã«ãããŸããã ãããpackage.jsonã«è¿œå ããããšã§è§£æ±ºããŸããïŒ
"jest": {
"testEnvironment": "node"
}
ããã¯æ©èœããŸãããããããµããŒãããããã¥ã¡ã³ããèŠã€ãããªãããã§ãã ãããã¯ãŒã¯ãšã©ãŒã®å Žåã¯error.responseã空ã«ããå¿ èŠããããšæ³å®ããŠããŸããããã§ãªãå Žåã¯ãAPIãšã©ãŒã§ãã
axios.request(options).catch(function(error) {
if (!error.response) {
// network error
} else {
// http status code
const code = error.response.status
// response data
const response = error.response.data
}
});
誰ããããã«ã€ããŠã®æè¯ã®è§£æ±ºçãèŠã€ããŸãããïŒ ã¢ã¯ã·ãªã¹ã®äººã ã¯ããã€ãã®é³ãç«ãŠãŸã:(
ä»æ¥ããã®ãšã©ãŒãçºçããŸãããåé¡ãäœã§ãããããããŸããããããç§ã®ã¹ã¯ãªããã§ãã
js
var url = "http://localhost:8000/";
Axios.get(url).then(function(response){
alert(response)
}).catch(function(error){
alert(error)
});
httpïŒ// localhost ïŒ8000 /ã¯JSONå¿çãè¿ããŸãããããã¯ä»ã®ãã¹ãã§ã¯æ©èœããŸãã
Corsãšã©ãŒã®å¯èœæ§ããããŸãã
è¡87ãxhrã¢ããã¿ãŒã§ããããã¯ãŒã¯ãšã©ãŒãã«èšå®ãããŠããŸããïŒ ãšã©ãŒããã£ããã§ããããã«ãããå€æŽããã«ã¯ã©ãããã°ããã§ããïŒ
https://github.com/axios/axios/blob/d7f021b8d4cc50bfa0653011bc02452d234d1255/lib/adapters/xhr.js#L84 -L91
ç§ã®æªããããã¯åé¡ã§ã¯ãããŸãããããã©ãŠã¶ã®ã»ãã¥ãªãã£ã®ããã«äºæ³ãããåäœã§ãã XHRãšã©ãŒå¿çã¯ããšã©ãŒã¹ããŒã¿ã¹ã³ãŒãã§ProgressEventãåãåãããã«ãªããŸããã
ç§ã¯åãåé¡ãæ±ããŠããŸãã CORSã®åé¡ã ãšæããŸãã 誰ããããã«å¯Ÿããè¯ã解決çãèŠã€ããŸãããïŒ
@codygreen API Gatewayã®åé¡ãä¿®æ£ã§ããŸãããïŒ ããã«ãããã°ããã®ã«åœ¹ç«ã€å¿çã¹ããŒã¿ã¹ã³ãŒããç解ããããšããã§ããŸããã
ããã§åãäžè¬çãªåé¡ã ç§ã«ãšã£ãŠã¯ééããªãCORSã§ããã ãã©ãŠã¶ããµãŒããŒã«OPTIONSãªã¯ãšã¹ããéä¿¡ããŠããŸããããïŒããŒãå ã§ïŒãã³ãã©ãŒãèšå®ããŠããŸããã§ããã Axiosã¯ïŒå€±æããïŒèŠæ±ãæ£åžžã«å®äºããŸãããå¿çã¯æªå®çŸ©ã§ã
return axios.httpClients.server.post('/someUrl, {
someData:some_data
}).then(response => {
console.log(response);
//the following errors out because response is undefined
if (response.data && response.data.success === true) {
}
}).catch(err => {
//catch never triggered
console.log(err)
});
å¿çã®å¿çã³ãŒãã¯äœã§ããïŒ ãããã¯ãŒã¯ãšã©ãŒã®å ŽåãFetch APIã䜿çšãããšããã©ãŠã¶ã¯ã³ã³ãœãŒã«ã«ãã°ãèšé²ããŸãããã»ãã¥ãªãã£äžã®çç±ããJavaScriptã«æž¡ããªããããæ¬æã¯ç©ºã«ãªããŸãã å¿çã®ãããã¯ãŒã¯ãšã©ãŒã«ã¢ã¯ã»ã¹ããå Žåã¯ã FETCH STANDERSãåç §ããŠãã ãããHTTPå¿çã³ãŒãã200ã«å€æŽããå¿çã®æ¬æã«ãšã©ãŒã¡ãã»ãŒãžãå«ããŸãã
ç§ã®åé¡ã¯DNSã®åé¡ã§ããã ããã¯éµäŸ¿é éå¡ã§åããããã¢ã¯ã·ãªã¹ã§ã¯å€±æããã ã«ãŒã«ãè©ŠããŠãããã§ã倱æããŠããããšã確èªããŸããã ãã®ãããDNSãæ£ããæ§æãããŠããŸããã§ããã ãã®åé¡ãçºçããå Žåã¯ç¢ºèªããŠãã ããã
ãããä»ã®ã±ãŒã¹ã«åœãŠã¯ãŸããã©ããã¯ããããŸãããããããåãåé¡ãã©ã®ããã«è§£æ±ºãããã§ãïŒ CORSã«ã€ããŠè©±ããŠããããšãèæ ®ããŠïŒã
ããã³ããšã³ãåŽã§ã PUT
ãŸãã¯POST
ãªã¯ãšã¹ãã®ãã©ã¡ãŒã¿ãšããŠheaders
ãæž¡ããŠããããšã確èªããŸãã
const axiosParams = {
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': 'application/json',
},
};
axios.put(`${api.url}/like`, axiosParams)
.then((response) => {
// ...
});
ãŸããããã¯ãšã³ãåŽã§ã¯ãExpressã§CORSã䜿çšããŠããããšã確èªããŠãã ããã
// server.js
const express = require('express');
const app = express();
var cors = require('cors'); // Yep, you need to install this
app.use(cors()); // Works ð
ã¿ããªãç§ããã°ããã®éãã®åé¡ã«èŠåŽããŠããŸãã ããããAndroidããã€ã¹ã§ã®axios post networkcreateErrorã®åé¡ãç解ããŸããã axiosãããã¯ãŒã¯ãšã©ãŒã®çç±ã¯ãaxiosã«æž¡ãããã©ãŒã ããŒã¿ã«ééã£ãã¿ã€ãã®ããŒã¿ãªããžã§ã¯ããå«ãŸããŠããããã ãšæããŸãã axiosã§ã¯åãå
¥ããããªããã©ãŒã ããŒã¿ã®ãã©ã¡ãŒã¿ã®1ã€ãšããŠç»åãªããžã§ã¯ãïŒExpoã®ImagePickerãªããžã§ã¯ãïŒãå«ããŸããã Axiosã¯ãæååãfloatãintããŸãã¯imageã®ã¿ããã©ã¡ãŒã¿ãŒãšããŠåãåãå ŽåããããŸãã imageã¯paramãšããŠæž¡ãããšãã§ããŸãããããã¯imageã®ã¿ã€ãã§ã¯ãããŸãããããã¯åå¿ãã€ãã£ããªããžã§ã¯ãã§ããç§ã¯ãããåé€ããimage.uriãparamã®å€ã«å²ãåœãŠãããšã«ãã£ãŠparamãšããŠç»åãã£ãŒã«ããå«ããŸããããŠããã¯æ©èœããŸãã ãããç§ã以åçŽé¢ããŠããã®ãšåãåé¡ã«ééãããããããªãäœäººãã®äººã
ãå©ããããšãé¡ã£ãŠããŸãã
axiosãããã¯ãŒã¯ãšã©ãŒããã¹ãããŠãããšãã«ãã©ãŒã ããŒã¿ã®äžéšã1ã€ãã€åé€ãããšãåé¡ã®åå ãã©ãã§ããããããããŸãã
ã @ codygreen @hammadzz Amazon API Gatewayã§ããã«å¯Ÿãã解決çãèŠã€ããŸãããïŒã
æŽæ°ïŒAPI GatewayãšCORSã§èª°ããããã«ééããå Žåã¯ãå¿çã«access-control-allow-origin
å¿çããããŒãè¿œå ããå¿
èŠããããŸãã
ïŒ204ã§èª°ããèšã£ãããã«ããã©ãŠã¶ã§ãããã¯ãŒã¯ãšã©ãŒããã£ããã§ããªãå ŽåããããããAxiosã¯äžè¬çãªãšã©ãŒïŒ
new Error('Network error')
ïŒã§å¿çããŸãã ããããæªãå¿çïŒã¹ããŒã¿ã¹ã³ãŒãïŒ== 2xxãŸãã¯ã«ã¹ã¿ã ãã§ãã¯ïŒãšåºå¥ãããå Žåã¯ããšã©ãŒã¡ãã»ãŒãžã®ä»£ããã«status
ããããã£ããã§ãã¯ããã®ãæåã®æ¹æ³ã ãšæããŸãã äŸãã°ïŒaxios.request(options).catch(function(error) { if (!error.status) { // network error } });
ã«ã¹ã¿ã ã¹ããŒã¿ã¹ã³ãŒããèšå®ããããšã¯æªãèãã§ããïŒæ··ä¹±ãæãå¯èœæ§ããããŸãïŒãç¹å®ã®ããããã£ãèšå®ããŠãããšã©ãŒã±ãŒã¹ã1ã€ãããªãããããŸã£ãã圹ã«ç«ã¡ãŸããã
ãã¡ãããå®éã®ãšã©ãŒã«ã¢ã¯ã»ã¹ã§ããNode.jsã®ããã¥ã¡ã³ãã«åŸã£ãŠç¢ºèªã§ãããããNode.jsã®æ¹ãç°¡åã§ãã
Googleããæ¥ãŠããå Žåã¯ããã®APIã¯éæšå¥šã§ããããšã«æ³šæããŠãã ããã ããã¯2016幎ããã®ãã®ã§ãv <0.13ã§ãã
ããªãã¯ããã§ãã¯ããerror.response
ãµãŒããŒã®å¿çã error.response === undefined
ãªãã©ã€ã³ç¶æ
ãšã®ç¹å¥ãªå Žåã®ããã«error.code === 'ECONNABORTED'
ã¿ã€ã ã¢ãŠãã®ããã
æŽæ°ïŒAPI GatewayãšCORSã§èª°ããããã«ééããå Žåã¯ãå¿çã«å¿çããããŒãè¿œå ããå¿ èŠããããŸãã
access-control-allow-origin: *
絶察ã«ãããããªãã§ãã ããã *
代ããã«ãããã«å¿ããŠåç¹ãèšå®ããŸãã
ç§ã«ãšã£ãŠã¯ãlaravelã䜿çšããŠããŠã
->middleware(['auth:api'])
ãã®ã«ãŒãã«å¿ èŠãªä»ã®ãã¹ãŠã®ããã«ãŠã§ã¢ããç¶æ¿ãããŠããªãæ瀺çã«è¿œå ããå¿ èŠããããŸã
->middleware(['auth:api','cors']);
ç§ããã®åé¡ã«çŽé¢ããŸãããããŒã«ã«ãã¹ãã®ä»£ããã«ããŒã«ã«IPã¢ãã¬ã¹ã䜿çšããŠãã ããïŒäŸïŒ10.0.0.12ïŒ8083ïŒã ããã¯ç§ã®ããã«åããã
ãããã£ãŠãç§ãæ£ãããã°ãaxiosãªã¯ãšã¹ãããã®0ã¹ããŒã¿ã¹ã衚瀺ãããå ŽåããããŸãã ãã ããã©ã®ã±ãŒã¹ãçºçããããããã°ã©ã ã§æ£ç¢ºã«å€æããããšã¯ã§ããŸããã
ãããã®ã±ãŒã¹ã«ã¯ã CORSããªãã©ã€ããªã¯ãšã¹ãã倱æãããããå®éã®ãªã¯ãšã¹ããè©Šè¡ãããããšãããªãå Žåãå«ãŸããŸãã ãã®ããã404ã¹ããŒã¿ã¹ã¯é©åã§ã¯ãããŸããã
誰ãã@joelnetããŒã«ãè²·ãå¿ èŠããããŸãã ããã¯ç§ã®æ¥ãæã£ãïŒ
https://github.com/axios/axios/issues/383#issuecomment -308606088
ä»ã®äººã¯å¥ã®åé¡ãæ±ããŠãããããããŸããããããã¯ç§ã«ãšã£ãŠã¯ããŸããããŸããã
ãã®ãšã©ãŒãæç¶çã«çºçããŸãã CORSã®åé¡ã§ã¯ãªããšæããŸãã
ç§ã®API /ãµãŒããŒã¯.netãµãŒããŒã§ãã
æç¶çã«ããã«çŽé¢ããŠããä»ã®èª°ãïŒ
HTTPãŸãã¯httpsãæå®ããŠããªãã£ãããããã®ãšã©ãŒãçºçããŠããŸããã äž»ã«ã³ãŒãèªäœãæªå®çŸ©ã®ãããã³ã«ã§ãšã©ãŒãã¹ããŒããŸãã ããã¯åŠçãããããšã©ãŒã¡ã¿ã§ããå¿ èŠããããŸããå«ããå¿ èŠããããŸãã
@ jonathan-stoneãèšã£ãããã«ãAxiosã¯åã«äœãèµ·ãã£ãã®ãããããªãã®ã§ããããä¿®æ£ã§ãããšã¯æããŸããã ããã¯ããªãã®å人ãFunyunsã«éããããªãã®ã§ã圌ã¯åºãéãŸã£ãŠãããšèšããŸãã ãåžžã«éããŠããããšæžãããŠããŸããããªãåºã¯éãŸã£ãŠããã®ã§ããã 圌ãã¯æ°žä¹ ã«éããŸãããïŒ404ïŒïŒ 誰ããç æ°ã§ããïŒ500ïŒïŒ 圌ãã¯åšåº«ã䜿ãæãããŸãããïŒ503ïŒïŒ 圌ã¯ç¥ããŸããã圌ãã¯ãã éããããŠããŸãïŒãããã¯ãŒã¯ãšã©ãŒïŒïŒ
APIããããŸããŸãªçš®é¡ã®ããŒã¿ãååŸããããšããŠããããŒã«ã«ExpressãµãŒããŒã«å¯ŸããŠAxiosãé£ç¶ããŠèµ·åãããšããã®ãšã©ãŒãçºçããŠããŸããã Axiosãæ£ãããšã©ãŒãå ±åããªãã£ãããã§ã¯ãããŸãã-ããã¯ã§ããŸãã-ç§ã®ExpressãµãŒããŒã¯å¿ããããããã«äœãå¿çããŸããã§ããã
ïŒïŒ164ã®retry-axiosã䜿çšããŠïŒãªã¯ãšã¹ãã
åé¡ã解決ããã«ã¯ãåžžã«æå®ããå¿
èŠããããŸã
Nginx
add_header'Access-Control-Allow-Origin '*åžžã«;
åé¡ã解決ããã«ã¯ãåžžã«æå®ããå¿ èŠããããŸã
Nginxadd_header'Access-Control-Allow-Origin '*åžžã«;
ãããããªãã§ãã ããã ããã¯çµ¶å¯Ÿã«ã
ããã«ã¡ã¯çããããããã·ã«ãšã³ãã£ãã£ãµã€ãºä¿è·ãèšå®ããŸãããäžè¬çãªãšã©ãŒãè¿ãããŸããã413ã¹ããŒã¿ã¹ã³ãŒããååŸã§ããŸãã...ã©ããããããå¯èœã§ããïŒ
response
ãªããžã§ã¯ããè©ŠããŸãããïŒ
axios.get(url).then(stuff => console.log(Object.keys(stuff.response));
@ComputerCarlæåãããšæããŸããïŒ catch
ã§çµããã®ã§ããã¯æããªãã§ãã ããããããç§ã¯ãããè©Šãããšãã§ããŸã...
ãããïŒ ç§ã®é ã¯ä»ã®å Žæã«ãããŸããïŒ ãã£ãããªããžã§ã¯ã...catch(err => console.log(Object.keys(err.response));
確èªããŠãã ãã
ç§ã¯èªåã®ããã°ã©ã ã®1ã€ã«åå ããŠããŸãã
err.response.data.message;
Expressããéä¿¡ããŸããã
app.use(function (err, req, res, next) {
res.status(err.status || 500);
// this is err.response.data on Axios client
res.send({ message: 'my custom error' });
});
@ComputerCarlã§ããã error.response
ã¯æªå®çŸ©ã§ã error.status
ãšåãã§ã:)ã¹ã¯ãªãŒã³ã·ã§ããã§ç¢ºèªã§ããŸããããã§ã«console.log
ãŸãã ã芧ã®ãšããã error.request
ã®ã¿ãXMLHttpRequestãªããžã§ã¯ãã§ãã
ããããŸããããªã2ã€ã®ãšã©ãŒïŒCORSã«å ããŠ413ïŒãçºçããã®ãããããŸããã ãã ããExpressã䜿çšããŠããå Žåã¯ãCORSãæå¹ã«ããå¿ èŠããããŸãã
const cors = require('cors');
// ...
app.use(cors());
ãŸããåè¿°ããããã«ããµãŒããŒã®ãã©ããã¢ãŠããèŠæ±ãæåŠããå ŽåãAxiosã¯ãšã©ãŒã®åå ãèªèããŸããã ãã®æç¹ã§ãç§ã¯å°æããŠããŠãè³¢ã人ãçããã®ãåŸ ã€å¿ èŠããããŸãã :-)
@ComputerCarlãè©Šãããã ãããããšã
ãããããªãã«åœ¹ç«ã€ãã©ããã¯ããããŸãããããªã¯ãšã¹ãããããã·ããã¢ããªã±ãŒã·ã§ã³ãäœæããŸããã ç§ã䜿çšããŠãããã¬ãŒã ã¯ãŒã¯ã¯ãExpressãšã©ãŒãé£ãã€ã¶ããŠããŸããã æåŸã«ããšã©ãŒres.send({ message: messageFromProxy });
æ瀺çã«è»¢éããåŸããšã©ãŒã確èªããŠã¯ã©ã€ã¢ã³ãã§åŠçããããšãã§ããŸããã
幞éãã
@ jonathan-stoneã«ãããšããããã¯ãŒã¯ãšã©ãŒã¯ãAxiosããµãŒããŒã«ãŸã£ããæ¥ç¶ã§ããªãã£ãããããµãŒããŒãããšã©ãŒã³ãŒããååŸã§ããªãããšãæå³ããŸãã
ããã¯èª°ããå©ãããããããŸããã
error.data ;
@ balwant-sdããã«éä¿¡ããã¹ã¯ãªãŒã³ã·ã§ããã§ãããããã«ããã©ãŠã¶ã¯413ã¹ããŒã¿ã¹ã³ãŒããæ£ããèªèããŸãããaxiosã¯èªèããŸãã
ãããã¯ãŒã¯ã¿ãã§ã413ã®ã¹ããŒã¿ã¹ã³ãŒããèŠãããšãã§ããŸã...
äžèšã®ããã«ã401ãšã©ãŒãè¿ããã°ã€ã³POSTã¯ã401ã§ã¯ãªãæªå®çŸ©ã®ã³ãŒãã§ããããã¯ãŒã¯ãšã©ãŒããè¿ããŸãã
ãããã£ãŠããã®ãšã©ãŒã¯ããããã¯ãŒã¯ã¿ãã«ã®ã¿åæ ãããèšå®ãã¹ã®CORSãšã©ãŒã®ããã§ãã @ketysekãšåãåé¡ããããngnixãããã«CORSãé©çšããŠããªãããã§ãã åè¿°ã®ããã«ãäžè¬çãªãããã¯ãŒã¯ãšã©ãŒãaxios error.response
ãªãããšã¯ãããŸããã ããã§ç§ã¯ããã¯ãšã³ãã®ããã«ããã®ã奜ãã§ã..ããåŸ
ã£ãŠãç§ã¯ãããããŸãã...
ããã«ã¡ã¯ç§ãåãåé¡ãæ±ããŠããŸããé©åãªå¿çãååŸããããã«èŠæ±ããŠããaxiosã¯åžžã«ããããã¯ãŒã¯ãšã©ãŒããè¿ãã.catchïŒfunctionïŒerrorïŒ{}ïŒ;ã«ç§»åããŸãã ããŒã ãã®åé¡ã®è§£æ±ºçãæã£ãŠãã人ã¯ããŸããïŒ
ä»æ¥ãåãåé¡ããããŸããã ãã®åé¡ã¯äž»ã«ããªãªãžã³ã®ã¯ãã¹ãµã€ãHTTPãªã¯ãšã¹ããèš±å¯ããªãããã¯ãšã³ãã«é¢ãããã®ã§ãã ç§ã®å Žåãç§ã¯djangoã䜿çšããŠããã®ã§ãcorsheadersã¯ã©ã¹ãããã«ãŠã§ã¢ã®ã§ããã ãé«ãäœçœ®ã«é
眮ããŸããã
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware', //..etc
]
ãããŠãç¹å®ã®ãªãªãžã³ã®ã¿ãèš±å¯ããããã«CORS_ORIGIN_WHITELISTãäœæããŸããã
CORS_ORIGIN_WHITELIST = [ "http://localhost:8081" ,
//..etc
]
ããã¯django-cors-headersçšã§ãã djangoãŠãŒã¶ãŒã§ãªãå Žåã¯ããæ°ã«å
¥ãã®corsããããŒã¢ãžã¥ãŒã«ã®ããã¥ã¡ã³ãã確èªããå¿
èŠããããŸãã
ïŒ204ã§èª°ããèšã£ãããã«ããã©ãŠã¶ã§ãããã¯ãŒã¯ãšã©ãŒããã£ããã§ããªãå ŽåããããããAxiosã¯äžè¬çãªãšã©ãŒïŒ
new Error('Network error')
ïŒã§å¿çããŸãã ããããæªãå¿çïŒã¹ããŒã¿ã¹ã³ãŒãïŒ== 2xxãŸãã¯ã«ã¹ã¿ã ãã§ãã¯ïŒãšåºå¥ãããå Žåã¯ããšã©ãŒã¡ãã»ãŒãžã®ä»£ããã«status
ããããã£ããã§ãã¯ããã®ãæåã®æ¹æ³ã ãšæããŸãã äŸãã°ïŒaxios.request(options).catch(function(error) { if (!error.status) { // network error } });
ã«ã¹ã¿ã ã¹ããŒã¿ã¹ã³ãŒããèšå®ããããšã¯æªãèãã§ããïŒæ··ä¹±ãæãå¯èœæ§ããããŸãïŒãç¹å®ã®ããããã£ãèšå®ããŠãããšã©ãŒã±ãŒã¹ã1ã€ãããªãããããŸã£ãã圹ã«ç«ã¡ãŸããã
ãã¡ãããå®éã®ãšã©ãŒã«ã¢ã¯ã»ã¹ã§ããNode.jsã®ããã¥ã¡ã³ãã«åŸã£ãŠç¢ºèªã§ãããããNode.jsã®æ¹ãç°¡åã§ãã
ãã®ã¢ãããŒãã®åé¡ã¯ãaxios.thenã§ã³ãŒããå®è¡ãããšãã³ãŒãã«ãšã©ãŒãçºçããå Žåã§ããããšãã°ããå®æ°ãžã®å²ãåœãŠãïŒç§ã®å ŽåïŒã§ã¯ãåè¿°ã®ã¢ãããŒãã§ã¯ããå®æ°ãžã®å²ãåœãŠã
ã³ãŒãäŸïŒ
axios(options).then(() => {
const foo = '';
foo = 'bar'; // will throw error "assignment to constant"
}).catch(error => {
if (!error.status) {
// "assignment to constant" will be considered as network error
}
})
ãã®ãŠãŒãã£ãªãã£é¢æ°ã䜿çšããŠãã³ãŒã«ã¹ã¿ãã¯ã®äžäœãããããã¯ãŒã¯ãšã©ãŒããã£ããããŸãïŒé軞ãšã©ãŒããããã¯ãŒã¯ãšã©ãŒãšããŠèå¥ããªãããã«ããŸãïŒã
function isNetworkError(err) {
return !!err.isAxiosError && !err.response;
}
https://github.com/axios/axios/pull/1419ãåç §ããŠ
ãã®ãŠãŒãã£ãªãã£é¢æ°ã䜿çšããŠãã³ãŒã«ã¹ã¿ãã¯ã®äžäœãããããã¯ãŒã¯ãšã©ãŒããã£ããããŸãïŒé軞ãšã©ãŒããããã¯ãŒã¯ãšã©ãŒãšããŠèå¥ããªãããã«ããŸãïŒã
function isNetworkError(err) { return !!err.isAxiosError && !err.response; }
ïŒ1419ãåç §
åé¡ã解決ããŸãã
ããããšã
@mifiã¯ã isNetworkError
ã䜿çšããŠãé軞ãšã©ãŒããããã¯ãŒã¯ãšã©ãŒãšããŠèå¥ããªãããã«ããæ¹æ³ã®ãã詳现ãªäŸã瀺ãããšãã§ããŸããïŒ
ã¡ããã©ãã®ãããªïŒ
try {
...
some code that calls axios
...
} catch (err) {
if (isNetworkError(err)) return alert(âcheck your connection);
throw err;
}
ãããCORSãšã©ãŒã§ããããµãŒããŒã¬ã¹ã䜿çšããŠããå Žåãããã§ä¿®æ£ã§ããŸãã
resources:
Resources:
# CORS for 4xx errors
GatewayResponseDefault4XX:
Type: 'AWS::ApiGateway::GatewayResponse'
Properties:
ResponseParameters:
gatewayresponse.header.Access-Control-Allow-Origin: "'*'"
gatewayresponse.header.Access-Control-Allow-Headers: "'*'"
ResponseType: DEFAULT_4XX
RestApiId:
Ref: 'ApiGatewayRestApi'
ããã«ã¡ã¯ã誰ããç§ãå©ããããšãã§ããŸãããããããã¯ãŒã¯ãšã©ãŒãïŒ
https://stackoverflow.com/questions/58717673/axios-sending-network-error-while-status-is-200-ok
ãšã©ãŒãããããã¯ãŒã¯ãšã©ãŒãã®å ŽåãAxiosããµãŒããŒã«æ¥ç¶ã§ããªãããäœããã®çç±ã§ãµãŒããŒããå¿çãåŸãããªãããšãæå³ããŸãã ãã®ããã401ãšã©ãŒãAxiosã«çµã¿èŸŒãŸããããšã¯ãããŸããã ãã¶ããStackOverflowã«ããã€ãã®ãµã³ãã«ã³ãŒãã§è³ªåãæçš¿ããŸããïŒ
åããšã©ãŒãçºçããŸããç§ã«ãšã£ãŠã¯ããµãŒããŒã«å°éãã403ãšJSONã§å¿çããŠãããããAxiosã§Network Error
ã«ãªããŸãã
ãã©ãŠã¶ã®ãããã¯ãŒã¯ã¿ãã§å¿çã確èªã§ããŸãããcatchãããã¯ã§err.response
ãå®çŸ©ãããŠããŸãã
@ narenderv7ç§ã
@WarisRãµãŒããŒåŽã§
ãµãŒããŒã«è¿œå 'Access-Control-Allow-Origin': '*'
@ketysekåããšã©ãŒãçºçããŠããŸã
ãã®ãšã©ãŒããã£ããããæ¹æ³ãèŠã€ããŸãããïŒ
ããã«ã¡ã¯ã¿ããªãã¹ããŒã¿ã¹403ïŒ4 *ïŒ5 ïŒã§å¿çãååŸããŠããCORSãšã©ãŒã«åé¡ããããŸãNginxã¯ãå¿çã¹ããŒã¿ã¹2ããã³3 *
ç§ã¯ãã®åé¡ã解決ããŸãïŒnginxconfigãç·šéããŸãïŒ
add_header 'Access-Control-Allow-Origin' '*';
ã«ïŒ
add_header 'Access-Control-Allow-Origin' '*' always;
åãåé¡ããããŸããaxios0.18.0ãš0.19.0ã䜿çšããŠãã¹ãããŠããŸãã
æé ïŒ
æéåãã®ããŒã¯ã³ã䜿çšããŠãªã¯ãšã¹ããããšãããerror.responseãæ£ãã衚瀺ãããããšããããŸãããããšã©ãŒå¿çãæªå®çŸ©ã§ãã¡ãã»ãŒãžãããããã¯ãŒã¯ãšã©ãŒãã§ããå ŽåããããŸãã ãããããã¯ãšã³ããšã©ãŒãŸãã¯axiosã®ãã°ã§ããã®ã¯ãªãã§ããïŒ
ãã©ãŠã¶ã®ADãããã«ãŒãåå ã§ããå ŽåããããŸã...
incognito
ãŸãã¯private
ã¢ãŒããè©Šãããæ°ãããã©ãŠã¶ãããŠã³ããŒãããŠãã¹ãããŠãã ãã...
@ narenderv7ã¯ãããµãŒããŒåŽã®ééãã§ãã ããããAxiosã¯ãã®ã±ãŒã¹ã®ãšã©ãŒãåŠçã§ããã¯ãã ãšæããŸãããïŒ
ç§ã¯ãããã®2ã€ã®ã±ãŒã¹ãåºå¥ããå¿ èŠããããŸãïŒ
ç§ããã§ãã¯ããããã«ã catch
ãããã¯ã«ãããšã©ãŒã®æ»ãã¯ãäžèšã®äž¡æ¹ã®å Žåã§åãã§ãã
ãŸã åé¡ããããŸãïŒ
https://github.com/axios/axios/issues/1296
ãšã©ãŒã¯ãŸã ååšããŸãã誰ãããã®åé¡ã®è§£æ±ºçãæã£ãŠããå Žåã¯ãç§ãã¡ãšå ±æããŠãã ããã
ãã®ãŠãŒãã£ãªãã£é¢æ°ã䜿çšããŠãã³ãŒã«ã¹ã¿ãã¯ã®äžäœãããããã¯ãŒã¯ãšã©ãŒããã£ããããŸãïŒé軞ãšã©ãŒããããã¯ãŒã¯ãšã©ãŒãšããŠèå¥ããªãããã«ããŸãïŒã
function isNetworkError(err) { return !!err.isAxiosError && !err.response; }
ïŒ1419ãåç §
ã¿ã€ã ã¢ãŠããšã©ãŒããããã®æ¡ä»¶ã«äžèŽããå¯èœæ§ããããŸãã
æãåèã«ãªãã³ã¡ã³ã
ãã®åé¡ãçºçããŠããŸãã 誰ãå©ããŠãããŸãããïŒ
ãµãŒããŒã®å¿çã¯401ã§ãããaxiosã¯ãããæäŸããŸãã
ãšã©ãŒ->ããããã¯ãŒã¯ãšã©ãŒã
error.response->æªå®çŸ©
error.status->æªå®çŸ©