๐จ ์ค๋ฅ ๋ฐ์
AxiosError message: 'Network Error'
const userInfoPatch = async (userInfo) => {
try {
// url: ์๋ฒ ์ฃผ์, id: ์ฌ์ฉ์ ์์ด๋, userInfo: ์ฌ์ฉ์ ์ ๋ณด ๊ฐ์ฒด
await axios.patch(`${url}/member/${id}`, userInfo).then(() => {
alert('์์ ์ด ์๋ฃ๋์์ต๋๋ค.');
});
} catch (error) {
console.log(error);
}
};
ํด๋ผ์ด์ธํธ ์ฝ๋์์๋ ๋ณ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ์์ด ๋ณด์๊ณ , ์๋ฒ ์ธก์์ ๋ถ๋ช ์ ๊ทผ์ ํ์ฉํ๋ ๋ฉ์๋๋ก PATCH์ ๋ํด ๋ฐ๋ก ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์๋ค. ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ GET, POST, DELETE ๋ฑ ์ฌ๋ฌ ๋ฐฉ์์ผ๋ก ์๋ฒ์ ์์ฒญํ ์ ์์๊ธฐ์ ๋์ฑ ์ด์ ๋ฅผ ์ฐพ๊ธฐ ์ฝ์ง ์์๋ค.
CORS(Cross-Origin Resource Sharing)๋โ
'๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค ๊ณต์ ' ๋ผ๋ ๋ป์ ๊ฐ์ง๋ ํด๋น ์ ์ฑ ์ ์๋ก ๋ค๋ฅธ ์ถ์ฒ์ ๋ฆฌ์์ค์ request๋ฅผ ํ ๋ ๋ณด์์์ ์ด์ ๋ก ๊ต์ฐจ ์ถ์ฒ HTTP ์์ฒญ์ ์ ํํ๋ ๊ฒ์ด๋ค.
https://developer.mozilla.org/ko/docs/Web/HTTP/CORS
ex) ๋ฆฌ์กํธ ์๋ฒ http://localhost:3000, ์คํ๋ง ์๋ฒ http://localhost:5000
๋ธ๋ผ์ฐ์ ๋ ๊ฐ๊ธฐ ๋ค๋ฅธ ์๋ฒ(๋ฆฌ์กํธ, ์คํ๋ง)์ ์์ฒญ์ ํ๊ฒ ๋๋๋ฐ ์ด๋ CORS ์ ์ฑ ์ ์ด์ ๋ก Error๊ฐ ๋ฐ์ํ๋ค.
๐ก ํด๊ฒฐ ๋ฐฉ๋ฒ
์ด๋ฌํ ๋ฌธ์ ์ ๋ํด ์๋ฒ์์๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ์ง ๋ชปํ๋ค. ๊ทธ๋์ ํด๋ผ์ด์ธํธ์ proxy๋ฅผ ๋์ด ์ฒ๋ฆฌ๋ฅผ ํ๊ธฐ๋ก ํ๋ค.
ํ๋ก์(proxy) ์๋ฒ๋โ
- ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด์์ ๋ฐ์ดํฐ ์์ฒญ๊ณผ ์๋ต์ ๋์ ๋ฐ์์ฃผ๋ ์ญํ
- ๋ณด์์์ ๋ฌธ์ ๋ก ์ง์ ํต์ ์ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ ์ฌ์ด์์ ํ๋ก์ ์๋ฒ๊ฐ ์ค๊ณํ๋ ์ญํ
ํ๋ก์(proxy) ์ค์ ๋ฐฉ๋ฒ
- http-proxy-middleware(์ฐธ๊ณ ํ ์ฌ์ดํธ)
- package.json์ proxy ์ถ๊ฐ(create-react-app์ผ๋ก ํ๋ก์ ํธ๋ฅผ ์์ฑํ ๊ฒฝ์ฐ๋ง ๊ฐ๋ฅ) โ
package.json
"proxy": "http://localhost:5000",
package.json ํ์ผ์ "proxy": "์๋ฒ ๋๋ฉ์ธ" ํ ์ค์ ์ถ๊ฐํด์ฃผ๋ฉด ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์๊ณผ ๊ฐ์ด proxy ์ฃผ์๋ฅผ ์ ์ธํ๊ณ path๋ง ์ ๋ ฅํ๋ค. axios ์ฌ์ฉ ์ '/member/์ฌ์ฉ์ ์์ด๋'๋ผ๊ณ ํ๋ฉด 'http://localhost:5000/member/์ฌ์ฉ์ ์์ด๋'๋ก ๊ฐ๊ฒ ๋๋ค.
const userInfoPatch = async (userInfo) => {
try {
// id: ์ฌ์ฉ์ ์์ด๋, userInfo: ์ฌ์ฉ์ ์ ๋ณด ๊ฐ์ฒด
await axios.patch(`/member/${id}`, userInfo).then(() => {
alert('์์ ์ด ์๋ฃ๋์์ต๋๋ค.');
});
} catch (error) {
console.log(error);
}
};