- 클라이언트가 서버에게 정보를 전달할 때 사용
- 속성: action, name, target, method(get, post)
- GET: 정보가져오거나 검색시 사용, backend로 데이터를 보낼 때 url쿼리 문자열에 데이터를 실어서 전송한다(보안문제)
- POST: 정보를 보내거나 생성할 때 사용, 데이터를 request의 본문(body)에 실어서 전송(보안 good), body에 대한 미들웨어 작업을 서버에서 해줘야한다
<form action="/getForm" method="get">
<label for="">
id:
<input type="text" name="id" required />
</label>
<br />
<!-- name이 key값인 배열 형태로 정보가 들어오기 때문에 name매우 중요 -->
<label for="">
email:
<input type="email" name="email" required />
</label>
<br />
<label for="">
password:
<input type="password" name="pw" required />
</label>
<br />
<button type="button">제출(button type)</button>
<button>제출(submit type)</button>
</form>
app.get("/prac1", function (req, res) {
res.render("practice/practice1.ejs");
});
app.get("/getPrac", function (req, res) {
console.log(req.query);
res.render("practice/result.ejs", {
title: "GET",
result: req.query,
//name, gender, year, month, day, hobby
});
});
<h1><%=title %>요청 확인하기</h1>
<div>
<span><%=userInfo.id %>(<%= userInfo.email %>)</span>님 환영합니다
</div>
<div>비밀번호는 <span><%=userInfo.pw %></span>이군요</div>
//body parser 설정방법 app.use이용
app.use(express.urlencoded({extended:true}));
//-> extended는 true, false 두경우 모두 req.body사용이 가능하다
//어떤 모듈을 쓰는지 정도의 차이를 가진다고 한다
app.post("/postPrac", function (req, res) {
console.log(req.body);
res.render("practice/result.ejs", {
title: "POST",
result: req.body,
//name, gender, year, month, day, hobby, color, number, longtxt
});
});
- 유효성검사: form요소에 정보가 올바르게 입력되었는지 검사, 올바르지 않으면 submit되지 않도록 설정하는 것
- required(필수값설정), minlength, maxlength, pattern 등의 방법이 있다
(1) required
- input 태그에 작성하여 해당값을 공란으로 둘 경우 submit되지 못하게 한다(checkbox는 특별한 방법필요)
<label for="">
id:
<input type="text" name="id" required />
</label>
(2) minlength, maxlength
- text타입 input요소에 글자수 기준을 설정하여 유효성 검사 실행
<!--10글자 이하만 입력가능-->
<label for="">
id:
<input type="text" name="id" maxlength = "10" />
</label>
(3) pattern
- input타입에 pattern속성으로 정규식을 사용하여 작성제한
- ^시작 $로 끝
- () 그룹분류
- [] 범위(a-z, 가-힣)
- {}글자수 설정(최소, 최대)
- title = "조건어길시 띄우는 문장";
<!--10글자 이하만 입력가능-->
<label for="">
id:
<input
type="text"
name="id"
maxlength = "10"
pattern="^([a-zA-Z0-9가-힣]){4,10}$"
title="아이디는 영어대소문자,숫자, 한글로 이루어진 4자이상 10자 이하여야합니다."
/>
</label>
(4) checkbox
- 최소 1개의 checkbox를 선택하도록 하려면 ejs파일의 script단에서 상세 설정필요
- radio는 같은 name의 input중 하나에 required를 적으면 선택을 필수로 하는 유효성검사가 가능하다
(1) form 태그에 submit이벤트(onsubmit) 발생시 return하는 함수를 적고 this를 통해 form객체를 해당 함수가 받도록 한다
<form
action="/js-form-check"
method="post"
name="validationForm"
target="_blank"
onsubmit="return checkForm(this)"
>
-> checkForm함수는 true나 false값을 return해야한다!!
(2) script에서 checkForm함수 작성 form.(name or id)를 통해 input요소에 접근하여 if문으로 유효성 검사를 진행한다
function(form) {
//checkbox
if (form.mail[0].checked === false && form.mail[1].checked === false) {
//아무것도 선택되지 않는 다면
alert("우편물 수령장소를 선택해주세요");
return false;
}
}
-> mail이라는 name값을 가진 두 체크박스[0], [1]의 값이 모두(&&) false = check되지않았을 경우 경고창을 띄우고 false값을 return하여 submit이벤트를 실행되지 못하게 한다
- backend로 데이터 전달시 대부분의 input태그는 name값과 input창에 입력된 값을 전달하지만 radio와 checkbox는 태그내부에 value 속성을 적어 value값을 전달해주어야 한다
- select의 option은 value값이 없어도 태그 가운데 값을 전달하지만 value값을 적어주는게 좋다
- fieldset 태그와 legend태그를 통해 input태그를 묶고 소제목을 붙일 수 있다
<fieldset>
<legend>로그인</legend>
아이디: <input type="text" name="id"/>
비밀번호: <input type="password" name="pw"/>
</fieldset>