form.submit()와 axios.post()는 서로 다른 방식으로 데이터를 전송합니다.
HTML form.submit()
- HTML 폼을 사용하여 데이터를 제출할 때, 사용자가 입력한 데이터는 기본적으로 application/x-www-form-urlencoded 형식으로 서버에 전송됩니다.
- 예를 들어, 사용자가 입력한 username과 password가 있다면, 서버에 보내는 데이터는 다음과 같은 형식입니다
username=사용자명&password=비밀번호
Axios axios.post()
- Axios를 사용하여 POST 요청을 보낼 때, 기본적으로 JSON 형식으로 데이터를 전송합니다.
- 위의 예시에서 axios.post()를 사용할 경우, 데이터는 다음과 같은 JSON 형식으로 전송됩니다
{
"username": "사용자명",
"password": "비밀번호"
}
정리하자면
이둘은 전송하는 포맷의 차이가 있고
- html form.submit()은 application/x-www-form-urlencoded 형식으로 데이터를 전송하고
- axios.post()는 JSON 형식으로 데이터를 전송한다
서버가 포맷을 지원해야 전송된 데이터를 처리할 수 있습니다.
Axios를 사용하여 데이터를 application/x-www-form-urlencoded 형식으로 전송하기
데이터를 URL 인코딩한 후 Content-Type 헤더를 설정해야 합니다
1. 첫번째방법 qs 라이브러리 사용
qs라이브러리는 객체를 쿼리 문자열로 쉽게 변환합니다.
npm install qs
import axios from 'axios';
import qs from 'qs';
const login = async (username, password) => {
try {
const res = await axios.post(
"http://localhost:9000/auth/login",
qs.stringify({
username,
password,
}),
{
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
withCredentials: true, // 쿠키를 포함하고 싶다면 추가
}
);
console.log('로그인 성공:', res.data);
} catch (error) {
console.error('로그인 오류:', error);
}
};
2. URL 인코딩 수동 처리
encodeURIComponent를 사용하여 각 필드를 인코딩한 후 문자열을 직접 구성합니다.
const login = async (username, password) => {
try {
const data = `username=${encodeURIComponent(username)}&password=${encodeURIComponent(password)}`;
const res = await axios.post(
"http://localhost:9000/auth/login",
data,
{
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
withCredentials: true, // 쿠키를 포함하고 싶다면 추가
}
);
console.log('로그인 성공:', res.data);
} catch (error) {
console.error('로그인 오류:', error);
}
};
'웹' 카테고리의 다른 글
브라우저 언어감지, 다국어 페이지 URL로 표현하기 (0) | 2024.09.20 |
---|---|
React로 WebSocket 통신해보기 (client, server) (0) | 2024.04.16 |
ESC눌러서 모달창 닫기, 배열을 querystring파라미터로 전달하기 (0) | 2023.09.12 |
쿠키 세션 토큰 JWT (0) | 2023.06.30 |
CORS (0) | 2023.06.04 |