반응형
12-23 19:41
Today
Total
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
관리 메뉴

개발하는 고라니

[Node.js] 요청 라우팅 - Router 본문

Framework/Node.js

[Node.js] 요청 라우팅 - Router

조용한고라니 2021. 4. 23. 02:26
반응형

Router

node.js를 공부하던 도중 http를 사용하다가 express 모듈을 사용해서 웹 서버를 간단하게 구현해보았다. use()를 이용해 미들웨어를 등록하고 특정 url로의 주소매핑도 해보았는데, get과 post를 나누고 싶던 찰나 Router를 사용하면 된다는 것을 알았다.

 

  • Express 4에는 Router 미들웨어가 포함됨
  • Router 객체를 참조한 후 route() 메서드를 이용해 라우팅함
var router = express.Router(); //router 객체가 반환

router.route('/process/login').post(function(request, response) { ... });

...

app.use('/', router); /* 마지막에 이것을 넣어줘야함 */
method name desc
get( callback ) GET 방식으로 특정 패스 요청이 발생 시, 사용할 콜백 함수 지정
post( callback ) POST 방식으로 ..
put( callback ) PUT 방식으로 ..
delete( callback ) DELETE 방식으로 ..
all( callback ) 모든 요청 방식을 처리하며, 특정 패스 요청이 발생 시, 사용할 콜백 함수를 지정

출처: Do it! Node.js 프로그래밍(개정판) 인프런 강의

로그인 폼에서 로그인 정보를 POST로 보내 body에 담긴 정보를 받아내는 작업까지를 해보도록 하자.

//login.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form action="/login" method="post">
        <div>
            <input type="text" name="id">
        </div>
        <div>
            <input type="text" name="pw">
        </div>
        <button>Submit</button>
    </form>
</body>
</html>
//app5.js
var express = require('express');
var http = require('http');
var path = require('path');
var static = require('serve-static');
var bodyParser = require('body-parser');
var fs = require('fs');

var router = express.Router();
var app = express();

app.set('port', process.env.PORT || 3000);

app.use('/public', static(path.join(__dirname, 'public')));
app.use(bodyParser.urlencoded({extended:false}));
app.use(bodyParser.json());

/* GET /login URL에 대한 미들웨어 생성, 매핑 */
app.route('/login').get((request, response) => {
    console.log("/login GET");

    fs.readFile('html/login.html', 'utf8', (err, data) => {
        if(err) throw err;

        console.log('login.html 읽음' + data);
        //response.writeHead(200, {"Content-Type":"text/html; charset=utf8"});
        response.send(data);
    });
});
/* POST /login URL에 대한 미들웨어 생성, 매핑 */
app.route('/login').post((request, response) => {

    console.log('/login POST');

    var body = request.body;

    var id = body.id;
    var pw = body.pw;
    
    console.log(body);
    console.log('id : ' + id + ', ' + 'pw : ' + pw);

    response.redirect('/');
});


/* Add router Middleware */
app.use('/', router);

/* Web Server 생성 */
http.createServer(app).listen(app.get('port'), ()=>{
    console.log(`Express Server is running on ${app.get('port')}`);
});

오류 페이지 보여주기

> HTTP 통신 중 에러를 만나게 될 경우 (예: 404, 402, 500, 403, ...)

app.all("*", (request, response) => {
    response.status(400).send('<h1>400 ERROR Occured!!</h1>');
});

 

# Reference

Do it! Node.js 프로그래밍(개정판) 인프런 강의

 

반응형

'Framework > Node.js' 카테고리의 다른 글

[Node.js] MongoDB CRUD  (0) 2021.04.25
[Node.js] 파일 업로드  (0) 2021.04.24
[Node.js] Node.js Tutorial (3) - File System  (0) 2021.04.16
[Node.js] Node.js Tutorial (2)  (0) 2021.04.16
[Node.js] Node.js Tutorial (1)  (0) 2021.04.16
Comments