req.body
객체로 받을 수 있게 도와준다.💡 새로운 프로젝트(폴더)생성 시 아래 내용 설치해주어야 한다. 까먹지 말자!
npm init -y
: 물어보는 거 없이 다 yes로 답변해주겠다는 거. package.json
파일 생긴다.npm i express ejs
: 두 개 한 번에 설치할수있다.jQuery
사용할거면 script로 불러와야 한다.index.js
에 기본으로 있어야 하는 내용이다.//express모듈을 가져온다.
//가져온 express모듈을 app이라는 변수에 담아 express프레임워크를 시작하겠다.
//이제 server객체를 만들 수 있다.
const express = require("express");
const app = express(); //서버객체 만들고
const PORT = 8000; //포트 번호 지정.
//뷰엔진, ejs사용하겠다고 세팅
app.set("view engine", "ejs");
//기본 라우터(localhost:8000)로 들어갔을 때 index.ejs를 보여주겠다.
//접속에 대한 응답을 위해 만든 코드.
app.get("/", function(req,res){
res.render("index")
})
//포트 열어주기.
app.listen(PORT, function () {
console.log(`server Open! : ${PORT}`);
});
//-----기본적으로 rqq.body를 해석하기 위한 코드로 보면 된다.
//그걸 미들웨어로 등록해준 것.
app.use(express.urlencoded({ extended: true }));
//x-www-form-urlencoded 형태의 데이터를 해석
// extended: true 일 경우 qs모듈(외부모듈)을 이용한다.
// extended: false일 경우 기본 내장모듈(노드내장모듈)인 queryString을 사용한다. 이걸 결정하는 것.
app.use(express.json());
//application/json 형태의 데이터를 해석
get
, post
가 있다.//이런식으로 사용한다.
<form action="/get" method="get" target="_blank" name="login">
action
: 폼을 전송할 서버 주소를 지정.name
: 폼을 식별하기 위한 이름을 지정.//데이터가 넘겨지면 name에서 작성한 내용이 key 값으로 사용된다.
//이러한 input요소가 있고
<input type="text" name="id" />
<input type="password" name="pw" />
<button type="submit">제출</button>
//각각 jeong, 1234를 submit 했다면
//넘겨진 값은 아래와 같다.
{ id: "jeong", pw: "1234"}
//그리고 name값을 적어주면 아래와 같이 해당 요소의 선택도 가능하다.
document.forms["login"]
console.log(document.forms["login"])
target
: 창을 어떻게 열 것인지에 대한 설정. 값: _blank
, _self
method
: 폼을 서버에 전송 할 http메소드 지정.form태그
로 묶는다.<body>
<h1>로그인</h1>
<form>
<input type="text" name="id" />
<input type="password" name="pw" />
</form>
<h1>회원가입</h1>
<form>
<input type="text" name="id" />
<input type="password" name="pw" />
<input type="text" name="name" />
<input type="password" name="email" />
</form>
</body>
get
으로 작성해주면 된다.get
요청은 url로 접속이 가능하다.req.query
라는 공간에 담겨져서 온다.//[index.js 파일]
//기본 라우터(localhost:8000)로 들어갔을 때 index.ejs를 보여주겠다.
//접속에 대한 응답을 위해 만든 코드.
app.get("/", function (req, res) {
res.render("index");
});
//get요청을 받는 /get이라는 주소를 만들어준다.
app.get("/get", function (req, res) {
console.log(req.query); //{ id: 'jeong', pw: '1234' }
console.log(req.query.id); //"jeong"
//req.query;
//get요청은 데이터를 query에 담아서 값을 가져온다.정보가 객체로 담겨서 오게 되는 것.
//git요청에 대해 client가 보낸 데이터를 담고 있는 것!
res.send("get 요청 성공");
//send는 특정 값을 응답으로 보내겠다는 것. 객체 배열 등을 보낼 수 있다.
});
<!--[index.ejs 파일]-->
<h1>로그인 get요청</h1>
<!-- form전송은 클라이언트가 서버로 데이터를 보내는 방법 중 하나이다. -->
<!-- action: 요청을 보낼 주소(내 서버에 보낸다는 가정 하에 도메인을 뗀 나머지 주소 입력. 실제 웹 서버에 존재하는 주소여야한다.) -->
<!-- method: 어떤 방식으로 요청을 보낼거냐. (get or post 사용) -->
<!-- 그러면서 form안에 있는 걸 같이 넘기게 되는 것. -->
<form action="/get" method="get" target="_blank" name="login">
<fieldset>
<legend>로그인정보</legend>
<input type="text" name="id" />
<input type="password" name="pw" />
</fieldset>
<input type="radio" name="gender" value="남자" id="men" />
<label for="men">남자</label>
<input type="radio" name="gender" value="여자" id="women" />
<label for="women">여자</label>
<button type="submit">제출</button>
</form>
<h1>회원가입</h1>
<form action="/signIn" method="get">
아이디<input type="text" name="id" />
비밀번호<input type="password" name="pw" />
이름<input type="text" name="name" />
이메일<input type="email" name="email" />
<button type="submit">가입하기</button>
</form>
post
으로 작성해주면 된다.post
요청은 url로 들어갈 수 없다.url로 입력하는 무조건 get
이다.post
요청에 대한 데이터는 req.body
에 담겨서 온다.//[index.js 파일]
//--------------------post ver 1--------------------
//-----loclahost:8000/post주소로 post요청을 받기 위한 준비
//여기서 form전송으로 post요청을 보낼 수 있다.
app.post("/post", function (req, res) {
console.log(req.body);
res.send("post 요청 성공");
});
//--------------------post ver 2--------------------
//-----result파일을 랜더링하면서 값을 보내줄 수도 있다.
//데이터를 만들고, 이 데이터는 ejs파일에서 사용 가능.
app.post("/post/ver2", function (req, res) {
console.log(req.body);
res.render("result", {//result.ejs 파일로 보내겠다는거.
name: req.body.name, //req.body에 담긴 name값
email: req.body.email,//req.body에 담긴 email값
});
});
<!--------------------post ver 1-------------------->
<!--[index.ejs 파일]-->
<h1>회원가입 post요청</h1>
<form action="/post" method="post">
<input type="text" name="id" />
<input type="password" name="pw" />
<input type="text" name="name" />
<input type="text" name="email" />
<button type="submit">제출</button>
</form>
<!--------------------post ver 2-------------------->
<!--[index.ejs 파일]-->
<!--index.js에서 만든 값을 가져와서 사용한다.-->
<h1>회원가입 post요청 ver2</h1>
<form action="/post/ver2" method="post">
<input type="text" name="id" />
<input type="password" name="pw" />
<input type="text" name="name" />
<input type="text" name="email" />
<button type="submit">제출</button>
</form>
<!--[result.ejs 파일]-->
<body>
<%=name%> (<%=email%>)님 환영합니다.
</body>
표시 | 의미(사용법) |
---|---|
/ | 정규식을 사용하겠다. /와/사이에 작성해준다. |
^ | 시작 표시 |
$ | 끝 표시 |
[] | 범위, 포함여부를 표시 [a-z0-9] : a~z문자, 숫자를 의미 |
{} | 개수를 표시 ( 최소 최대 길이) {8,12} : 8자 이상 12자 이하 |
() | 그룹 검색 및 분류 |
. | 임의의 글자 하나 |
+ | 1개 이상의 글자 |
* | 0개 이상의 모든 문자 |
? | 0~1번 반복되는 문자열 |
특수문자 사용범위 | {}[]\/?.,;: |
010-0000-0000형태 지정 | [0-9]{2,3}-[0-9]{3,4}-[0-9]{4} |
<form action="/post/ver2" method="post">
<input type="text" name="id" pattern="^([a-zA-Z0-9]){4,10}$" title="소문자, 대문자, 숫자로 조합된4자~10자로 입력" />
<input type="password" name="pw" oninput="validCheckPw(this)" />
<div id="error-pw"></div>
<input type="text" name="name" required />
<input type="number" min="5" max="10" placeholder="숫자" />
<input type="text" name="email" />
<button type="submit">제출</button>
</form>
//title을 입력해주면 지정한 식과 다를 경우 화면에 메세지를 보여줄 수 있다.
<input type="password" name="pw" oninput="validCheckPw(this)"/>
<div id="error-pw"></div>
//oninput 은 input태그에 올라왔을 때를 의미한다.
//validCheckPw()함수를 실행할건데
//실행 시의 값을 가져와야 하니 this를 넣어준다. 이 자체를 넘겨야 하기 때문.
//그리고 error가 났을 때 메시지를 띄우기 위한 공간도 div로 만들어준다.
//el은 요소를 의미.
//검사를 하고 싶으면
//regexPw.test("검사하고 싶은 값") 이런 형태로 작성해준다.
//얘는 true or false를 return한다.
function validCheckPw(el) {
const value = el.value
const error = document.getElementById("error-pw")
const regexPw = /^([a-z0-9]){4,10}$/
if (regexPw.test(value)) {
console.log("정규식 일치")
} else {
error.innerHTML = "영어소문자, 숫자를 4자이상 10자이하로 작성하세요."
console.log("정규식 불일치")
}
}
💬