데이터를 쉽게 처리할 수 있도록 도와주는 미들웨어
// req.body 객체 해석을 위한 body-parser 미들웨어 등록
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
form은 html 영역이므로 간단히 넘어갑니다!
클라이언트에서 입력된 데이터를 한 번에 서버로 정보를 전달할 때 사용
많이 쓰이는 개념이므로 잘 알아두기 (이후 과정에서 필수로 사용됨)
<form action="/폼을_전송할_서버_주소", name="폼이름", method="폼_전송방식(http메소드)" />
...
</form>
// JS에서 아래와 같이 사용됨
document.forms['form태그_name속성값'];
라우팅 설정
app.get('/getForm', function (req, res) {
console.log(req.query);
res.send('get 요청 성공!');
});
app.post('/postForm', function (req, res) {
console.log(req.body);
res.send('post 요청 성공!');
});
app.get('/getForm', function (req, res) {
console.log(req.query);
// res.render(ejs_경로, 데이터)
// ejs_경로: views/ 폴더 내부 ejs 파일의 주소
// 데이터: 뷰에 넣어줄 정보
res.render('result', {
title: 'GET 요청 폼 결과 확인',
userInfo: req.query,
// get 방식은 클라이언트에서 보낸 데이터가 req.query에 저장
});
});
app.post('/postForm', function (req, res) {
console.log(req.body);
res.render('result', {
title: 'POST 요청 폼 결과 확인',
userInfo: req.body,
// post 방식은 클라이언트에서 보낸 데이터가 req.body에 저장
});
});
<body>
<h1><%= title %></h1>
<div><span><%= userInfo.id %></span>님 환영합니다!</div>
<div>비밀번호는 <span><%= userInfo.pw %></span>이군요!!</div>
</body>
폼 요소 입력없이 버튼을 누르면?
→ 유효성 검사 없이는 빈 문자열이 들어감!
form 요소들에 정보가 올바르게 입력되었는지 검사하는 것
파일들을 모니터링 하다가 소스코드 변경 시 자동으로 node 재실행하는 패키지
npm install -g nodemon # 전역 설치
nodemon -v # 설치 확인(버전 확인)
nodemon app.js # 진입점 파일 실행
지역 설치 VS 전역 설치
- 지역 설치: 해당 프로젝트의 node_modules/폴더 안에 패키지 설치
- 해당 프로젝트 내에서만 사용 가능
- 전역 설치: -g 옵션(global)으로 전역 node_modules/폴더 안에 패키지 설치
- 모든 프로젝트가 공통으로 사용 가능
npm install [패키지명] # 지역 설치 npm install -g [패키지명] # 전역 설치
<input type="submit"> 혹은 <button type="submit">
을 이용해 전송
Asynchronous JavaSCript And XML
JavaScript를 이용해 클라이언트와 서버 간에 데이터를 주고받는 비동기 HTTP 통신
XML 란?
eXtensible Markup Language
- HTML과 유사한 문자 기반의 마크업 언어
- HTML : 데이터를 보여줄 목적
- XML : 데이터를 전달, 저장할 목적
- XML 태그는 사용자가 정의해서 사용 가능 (HTML은 태그가 미리 정해짐)
JQuery 란?
HTML의 클라리언트 사이드 스크립트 언어를 단순화하도록 설계된 브라우조 호환성이 있는 JavaScript 라이브러리
라이브러리와 프레임워크의 차이가 궁금하다면
$.ajax({
type: "get", // 요청의 종류 (= form의 method 속성)
url: "/ajax", // 요청의 경로 (= form의 action 속성)
data: data, // 요청에 실어보낼 데이터 (서버가 받게될 데이터)
success: function (data) {
// 요청이 성공적으로 수행되었을 때 실행할 함수
console.log(data);
resultBox.textContent = `GET /ajax 요청 완료! ${data.name}님은 ${data.gender}이시죠?`
},
});
$.ajax({
type: "post",
url: "/ajax",
data: data,
success: function (data) {
console.log(data);
resultBox.textContent = `POST /ajax 요청 완료! ${data.name}님은 ${data.gender}이시죠?`;
},
});
Node.js와 브라우저를 위한 Promise 기반 HTTP 클라이언트
비동기 HTTP 통신 가능, return이 Promise 객체로 옴
<!-- 서버 (npm) -->
npm install axios
<!-- 클라이언트 (cdn) -->
<script src="cdn 주소"></script>
axios({
method: "get", // 요청 방식 (= form method 속성), default는 get
url: "/axios", // 요청 경로 (= form action 속성)
params: data, // GET 요청 => params에!
// 서버로 보낼 데이터 (query string)
// params를 사용하지 않고 query string을 직접 정의하여 요청을 보낼 수 있음
url: `/axios?name=${form.name.value}&gender=${form.gender.value}`
})
.then(function (res) {
console.log(res);
console.log(res.data);
resultBox.textContent = `GET /axios 요청 완료! ${data.name}님은 ${data.gender}이시죠?`;
})
.catch(function (error){
console.log("Error!",error);
});
axios({
method: "POST",
url: "/axios",
data: data, // POST 요청 => data에!
})
.then((res)=>{
console.log(res);
console.log(res.data);
resultBox.textContent = `POST /axios 요청 완료! ${data.name}님은 ${data.gender}이시죠?`
})
.catch(function (error){
console.log("Error!",error);
});
ES6부터 들어온 Promise 기반 JavaScript 내장 라이브러리
fetch(`/fetch?name=${form.name.value}&gender=${form.gender.value}`{
method: "GET", // fetch는 default로 get 방식으로 작동 (생략 가능)
})
.then(function (res) {
return res.json(); // JSON 응답을 네이티브 JavaSCript 객체로 파싱
})
.then(function (data) { // data 변수 => 직전 then 메서드의 리턴 값: res.json()
console.log(data);
resultBox.textContent = `GET /fetch 요청 완료! ${data.name}님은 ${data.gender}이시죠?`;
})
fetch("/fetch", {
method: "POST",
headers: { // JSON 포맷 사용 선언
"Content-Type": "application/json",
},
body: JSON.stringify(data), // 서버로 보낼 데이터 (JSON으로 변경)
})
.then((res) => {
console.log(res);
return res.json();
})
.then((res) => {
console.log(data);
resultBox.textContent = `POST /fetch 요청 완료! ${data.name}님은 ${data.gender}이시죠?`
})
response에는 Promise를 기반으로 하는 다양한 메서드(함수) 존재 → 메서드를 사용하여 다양한 형태의 응답 처리 가능
res.text(); // 응답을 읽고 텍스트를 반환
res.json(); // 응답을 JSON 형식으로 파싱 (실제로 확인 시, javascript 객체 형태로 반환)
Ajax vs. Axios vs. Fetch
- React-Native와 같이 업데이트가 잦은 경우에는 내장 라이브러리인 Fetch가 유리!
- 웹 프론트 프레임 워크를 다룰 때에는 Axios가 유리!
JavaScript Object Notation의 약자
데이터를 문자열의 형태로 나타내기 위해서 사용 → 데이터를 표시하는 방법 중 하나
네트워크를 통해 다른 시스템들이 소통할 때 사용하는 경량의 Data 교환 형식
JavaScript에서 파생되었으나, 다른 프로그래밍 언어에서도 지원하는 데이터 포맷
데이터를 구조적으로 표현할 수 있어 가독성이 뛰어남 → 컴퓨터, 사람 모두 해석하기 편함
JavaScript의 Object를 기반으로 하는 텍스트 형식 → JavaScript 객체와 유사
문자열, 숫자(정수, 실수), boolean, 중첩된 객체와 배열 저장 가능
요약: Client와 Server가 JSON이라는 특별한 형식의 데이터로 정보를 주고받는다!