Node.js | Express에 의한 요청 처리 기본 | 양식(form) 전송
클라이언트에서의 정보 전송 기본은 역시 ‘폼(form)‘일 것이다. 폼에서 전송되는 처리도 Express는 매우 간단다다. 이것은 다음의 두 포인트에 정리된다.
POST 전송은 router.post으로 등록
Express에는 공개된 주소와 거기에 접근했을 때의 처리를 등록할 수 있게 되어 있었다. 지금까지 routes안에 제공하는 스크립트는 “router.get"을 사용하여 이 등록 작업을 해 왔다. 하지만 POST 전송 대상의 주소는 “router.post"을 사용해야 하다.
"Router".post(주소, 호출하는 함수);
이렇게 호출하여, 지정된 주소에 POST으로 액세스할 수 있다. 기본적으로 router.get을 router.post으로 작성할 뿐, 사용법은 동일하므로 바로 알 것이다.
전송 폼의 값을 body에서 얻기
전송된 폼의 값은, Request의 ‘body’라는 속성에 정리하고 있다. 이것은 다음과 같이 사용한다.
var 변수 = "Request".body[얻는 이름];
얻는 이름은 폼의 입력용 태그의 name 속성에 작성한 이름을 지정한다. 그럼 이것도 실제로 간단한 예제는 만들어 보자. 아래에 필요한 스크립트를 정리해 두었다. 이번에도 /helo 관계의 파일을 다시 작성한다.
helo.ejs
<body>
<h1><%= title %></h1>
<%= msg %>
<form method="post" action="/form">
<input type="text" name="input1"
value="<%= input %>">
<input type="submit">
</form>
</body>
helo.js
var express = require('express');
var router = express.Router();
/* GET helo page. */
router.get('/', function(req, res, next) {
var p1 = req.query["p1"];
var p2 = req.query.p2;
var msg = p1 == undefined ? "" : p1 + "," + p2;
res.render('helo',
{
title: 'HELO Page',
msg: msg,
input: ''
}
);
});
/* POST helo page. */
router.post('/', function(req, res, next) {
var str = req.body['input1'];
res.render('helo',
{
title: 'HELO Page',
msg: "you typed: " + str,
input: str
}
);
});
module.exports = router;
수정되면 Node.js를 시작하고, / helo에 접근해 본다. 입력 필드가 하나만 있는 폼이 표시된다.
적당히 뭔가 써서 전송하면, 보낸 텍스트를 폼에 표시된다. 또한 필드에 작성된 텍스트도 그대로 유지되는 것을 알 수 있다.
제출 양식에는 <form method="post" action="/helo">
라고 작성하고 있다. 즉, /helo에는 GET과 POST 모두 대응이 필요하다. routes/helo.js을 보면, router.get과 router.post 모두가 준비되어 있는 것을 알 수 있을 것이다.
폼을 얻는 처리하는 router.post 부분에서는 이렇게 보내진 값을 얻을 수 있다.
var str = req.body['input1'];
이것으로 <input type="text" name="input1">
태그의 value를 변수로 추출할 수 있다. 다음에 그것을 사용한 처리를 실행하면 된다. 알고 보면 매우 간단하다!