서버(Server)/Server&Nodejs&DB

Nodejs , Express : URL 요청파라미터와 등록되지 않은 Path일 경우 예외처리

3DMP 2018. 5. 2. 10:51

URL 요청파라미터

post 방식 요청 path (Router) 의 맨 뒤의 경로를 값으로 쓰겠다는 것



형식 :

path/:name


클라이언트에서 요청할떄 name 으로 요청 보냄




nodejs : Express, Router 라우터로 경로에 대한 분기 처리

http://3dmpengines.tistory.com/1867


글을 먼저 참고



전과 달라진 부분만 강조하여 표시하면



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
<!DOCTYPE html>
 
<html>
<head>
    <meta charset="utf-8" />
    <title>로긴</title>
</head>
<body>
 
    <h1>로그인 Route</h1>
    <br />
    <form method="post" action="/process/Login/add">
        <table>
            <tr>
                <td><label>아이디</label></td>
                <td><input type="text" name="id"></td>
            </tr>
            <tr>
                <td><label>비번</label></td>
                <td><input type="text" name="passwords"></td>
            </tr>
        </table>
        <td><input type="submit" value="전송" name=""></td>
    </form>
 
</body>
</html>

 

submit 을 할때 경로 끝에 /add 를 붙여 이것이 경로가 아닌 파라미터로 넘어가게 한다






서버측 코드


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
var express = require('express');
var http = require('http');
var serveStatic = require('serve-static');      //특정 폴더의 파일들을 특정 패스로 접근할 수 있도록 열어주는 역할
var path = require('path');
 
var app = express();      //express 서버 객체
 
var bodyParser_post = require('body-parser');       //post 방식 파서
 
app.set('port'3000);
 
 
//미들웨어들 등록 시작, 아래 미들웨어들은 내부적으로 next() 가실행됨
 
//join은 __dirname : 현재 .js 파일의 path 와 public 을 합친다
//이렇게 경로를 세팅하면 public 폴더 안에 있는것을 곧바로 쓸 수 있게된다
app.use(serveStatic(path.join(__dirname, 'public')));
 
 
//post 방식 일경우 begin
//post 의 방식은 url 에 추가하는 방식이 아니고 body 라는 곳에 추가하여 전송하는 방식
app.use(bodyParser_post.urlencoded({ extended: false }));            // post 방식 세팅
app.use(bodyParser_post.json());                                     // json 사용 하는 경우의 세팅
//post 방식 일경우 end
 
 
 
//라우터를 사용 (특정 경로로 들어오는 요청에 대하여 함수를 수행 시킬 수가 있는 기능을 express 가 제공해 주는것)
var router = express.Router();
 
router.route('/process/login/:name').post(                      //이 경로로 들어오는 것은 post 방식으로 처리
    function (req, res) {
        console.log('/process/login:name 라우팅 함수에서 받음');
 
        var paramName = req.params.name; //이런 방식으로 경로에서 요청파라미터의 값을 얻어온다
 
        var paramID = req.body.id || req.query.id;
        var pw = req.body.passwords || req.query.passwords;
 
        res.writeHead(200, { "Content-Type""text/html;characterset=utf8" });
        res.write(paramName + ' ,  ' + paramID + " : " + paramID);
        res.end();
    }
);
 
app.use('/', router);       //라우트 미들웨어를 등록한다
 
 
//웹서버를 app 기반으로 생성
var appServer = http.createServer(app);
appServer.listen(app.get('port'),
    function () {
        console.log('express 웹서버 실행' + app.get('port'));
    }
);
 




입력 화면 :






전송 클릭



결과 화면 : 




실행 결과를 보면 add 가 post 보내기 방식과 Router를 통해 경로중 끝값인 :name 에 매칭되어 보내졌다는 결과를 볼 수 있다



파라미터를 보내는 방식은 get ,post , 라우터를 통한 파라미터 보내기 방식인 3가지가 있다






등록하지 않은 경로에 대한 예외처리는 다음 처럼 할 수 있다





상단 서버코드에서 접근 가능한 경로외의 경로 전체에  대한 코드만 추가해주면 되는데 다음과 같다

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
//라우터를 사용 (특정 경로로 들어오는 요청에 대하여 함수를 수행 시킬 수가 있는 기능을 express 가 제공해 주는것)
var router = express.Router();
 
router.route('/process/login/:name').post(                      //이 경로로 들어오는 것은 post 방식으로 처리
    function (req, res) {
        console.log('/process/login:name 라우팅 함수에서 받음');
 
        var paramName = req.params.name;
 
        var paramID = req.body.id || req.query.id;
        var pw = req.body.passwords || req.query.passwords;
 
        res.writeHead(200, { "Content-Type""text/html;characterset=utf8" });
        res.write(paramName + ' ,  ' + paramID + " : " + paramID);
        res.end();
    }
);
 
app.use('/', router);       //라우트 미들웨어를 등록한다


app.all('*',
    function (req, res)
    {
        res.status(404).send('<h1> 요청 페이지 없음 </h1>');
    }
);
 
 





'*' 정상경로가 아닌 모든 경우의 경우  res.status(..)  로 예외처리를 할 수 있다




위 이미지에 표시된 경로는 서버 public 폴더 안에 없는 경로임으로 위와 같은 예외처리 문장이 나타나게 됩니다



좀 더 예외처리를 향상되게 하고 싶다면 'express-error-handler'  모듈을 사용하여 예외처리를 할 수 있습니다


이 기능은 해당 에러에 대한 에러 페이지를 미리 만들놔 그 페이지를 보여주는 방식입니다






Path 를 찾지 못하는 경우의 flow






반응형