input type = "submit"
이나 button type="submit"
을 이용해 전송동기 방식
비동기 방식
dynamic
GET방식
//index.js
app.get('/ajax', (req, res) =>{
console.log('back', req.query);
res.send(req.query);
});
//index.ejs
function ajaxGet(){
console.log('ajax get')
//폼선택
const form = document.forms['register'];
// document.forms로 접근했을 때만 input type = text를 id로만 불러올 수있다.
// 물론 다른애들은 name으로 불러와야댐
console.log(form);
// console.log(form.name.value);
// console.log(form.gender.value);
const data = {
name : form.name.value,
gender : form.gender.value
}
$.ajax({
type : 'GET',
url : '/ajax', //받는 type만 다르다면 같은 url로 받아도 됨
data : data, //키랑 value값이랑 같을 때 data, < 이런식으로만 입력해줘도된다.
success: (res) =>{
console.log('res', res);
resultBox.textContent = `GET /ajax 요청완료 ${res.name}님은 ${res.gender}입니다.`
resultBox.style.color = 'blue'
},
});
}
POST방식
//index.js
app.post('/ajax', (req,res) =>{
console.log('back', req.body);
res.send(req.body);
});
//index.ejs
function ajaxPost(){
console.log('ajax post')
const form = document.forms['register']
//예외처리
if(form.name.value === ''){
alert('이름을 입력하세요')
return;
}
const data ={
name: form.name.value,
gender:form.gender.value
}
$.ajax({
type: 'POST',
url: '/ajax',
data : data,
success: (res) =>{
console.log('res', res);
resultBox.textContent = `POST /ajax 요청완료 ${res.name} 님은 ${res.gender}입니다.`
resultBox.style.color = 'red';
},
});
}
GET방식
// index.js
app.get('/axios', (req, res) =>{
console.log('back', req.query);
res.send(req.query);
});
//index.ejs
function axiosGet(){
console.log('axios get')
const form = document.forms['register'];
const data ={
name: form.name.value,
gender : form.gender.value,
};
axios({
method: 'GET',
url: 'axios',
params: data,
}).then(res => {
console.log('res', res) //ajax는 success로 res 받았는데 axios는 then 뒤에 응답받는다.
resultBox.textContent = `GET /axios 요청완료! ${res.data.name}님은 ${res.data.gender}입니다.`;
resultBox.style.color = 'aqua';
// res는 axios가 만들어준 객체임
});
}
POST방식
// index.js
app.post('/axios', (req, res) =>{
console.log('back', req.body);
res.send(req.body);
});
// index.ejs
async function axiosPost(){
console.log('axios Post');
const form = document.forms['register'];
const data ={
name: form.name.value,
gender : form.gender.value,
};
const res = await axios({
method: 'POST',
url: 'axios',
data, //post기 때문에 params를 적어주면 안된다.
});
const {name, gender} =res.data //구조분해할당
//그럼 밑에 res.data.name으로 안 적고 그냥 name만 적어도 된다.
resultBox.textContent = `POST /axios 요청 완료! ${name}님은 ${gender}입니다.`
resultBox.style.color = 'greenyellow'
}
GET방식
app.get('/fetch', (req, res) =>{
console.log('back', req.query);
res.send(req.query);
})
//index.ejs
function fetchGet(){
console.log('fetch Get');
// fetch는 객체를 만들 필요는 없음
const form = document.forms['register']
const url = `?name=${form.name.value}&gender=${form.gender.value}`
fetch(`/fetch${url}`, {
method : 'GET'
}).then(res =>{
//JSON응답을 네이티브 자바스크립트 객체로 파싱
console.log('res', res);
//return으로 밑에 json 객체를 밑에 then에 넘겨준다.
return res.json()
}).then(data =>{
console.log('data',data);
resultBox.textContent = `GEt /fetch 요청 완료! ${data.name}님은 ${data.gender}입니다.`
resultBox.style.color = 'orange'
});
}
POST 방식
//index.js
app.post('/fetch', (req, res)=>{
console.log('back', req.body);
res.send(req.body);
})
//index.ejs
function fetchPost(){
console.log('fetch post')
const form = document.forms['register']
const data = {
name : form.name.value,
gender : form.gender.value,
};
fetch('/fetch', {
method: 'POST',
headers :{
'Content-Type' : 'application/json'
},
body:JSON.stringify(data)
//JSON.stringify() : 자바스크립트 객체를 JSON 텍스트로 변환 -> key,value 가 스트링형태로 바뀜
//JSON.parse(): JSON형식의 텍스트를 자바스크립트 객체로 변환
}).then(res =>{
console.log('res', res);
return res.json();
}).then(data =>{
console.log('data', data);
resultBox.textContent = `post /fetch 요청 완료! ${data.name}님은 ${data.gender}입니다.`
resultBox.style.color = 'hotpink'
});
}
response
에는 Promise를 기반으로 하는 다양한 메서드(함수) 존재. 이 메서드들을 사용한다면 다양한 형태의 응답 처리 가능
response.text()
: 응답을 읽고 텍스트를 반환
response.json()
: 응답을 JSON 형태로 파싱(실제로 확인해보면 javascript 객체 형태로 반환
response.text() | response.json() |
---|---|
axios({
url : '통신하고자 하는 주소',
method : '통신하고자 하는 방식',
data: {json 형태의 보내고자 하는 데이터}
});
url
method
get
,post
,patch
,delete
가 있음params
req.query
이거 말하는거임)axios({
method: 'POST'
url : '/axios',
data : data
}.then((response) =>{
response.data
response.status
response.statusText
response.headers
response.config
});
response.data
: 서버가 제공한 응답(데이터)response.status
: 서버 응답의 HTTP 상태 코드, 성공이면 200response.headers
: 서버가 응답한 헤더res.send()
를 이용해 데이터를 보낸다.res.send
를 이용하면 데이터를 클라이언트로 다시 보낼 수 있다. 통신순서(?)
data
를 params
값에 담는다.params
를 req.query
로 보낸다.(post방식일때는 body임)req.query
에서 res.data
로 데이터를 보낸다.