Axios로 API 요청할 때 가장 흔한 실수 중 하나는 바로 params
와 data
의 오용입니다.
특히 POST
요청 시 params: {}
로 감싸서 서버에서 값을 못 받는 일이 자주 발생하죠.
요청 방식 | 목적 | Axios 두 번째 인자에 넣는 값 | 서버로 전달 위치 |
---|---|---|---|
GET | URL 쿼리 파라미터 | { params: { ... } } | /url?key=value |
POST | 요청 본문 (Body) | { key: value } | JSON Body |
params
로 감쌈// ❌ 잘못된 예시 - 서버는 name 못 받음
axios.post("/users/123/playlists", {
params: { name: "My Playlist" }
});
이렇게 하면 실제 서버에는 body가 다음처럼 전달됨:
{
"params": {
"name": "My Playlist"
}
}
서버는 name
을 찾지 못하고 "Missing required field: name"
에러 발생!
axios.get("/me/playlists", {
params: {
limit: 10,
offset: 0,
}
});
// → 실제 요청: /me/playlists?limit=10&offset=0
axios.post("/users/123/playlists", {
name: "My Playlist",
description: "노래 모음집",
public: false,
});
// → 서버는 JSON body로 위 내용을 받음
// ✅ GET 요청
export const getPlaylists = (query: { limit: number; offset: number }) => {
return axios.get("/me/playlists", { params: query });
};
// ✅ POST 요청
export const createPlaylist = (userId: string, data: { name: string }) => {
return axios.post(`/users/${userId}/playlists`, data);
};
params
키로 감싸서 쿼리스트링data
로 직접 넘겨야 body에 들어감params: { ... }
← GET에서는 OK, POST에서는 NO!axios get post params data 차이
axios 요청 실패
axios 중괄호 실수
벨로그 마크다운