LANGUAGE/NODEJS

[NODEJS] express, routing

보겸삼촌 2019. 8. 26. 17:55

# 개발환경

os : windows 10 Pro 64-bit

node-v : v10.16.0

npm-v : 6.9.0

ide : visual Studio Code

 

* 소스 디렉토리

# 소스 디렉토리

[ROOT]

  ㄴ app.js

  ㄴ [config]

     ㄴ dev.js

     ㄴ prod.js

  ㄴ [routes]

     ㄴ router1.js

     ㄴ router2.js

 

 

 

* Express router의 기본형태

const express = require('express');
const router = express();

//기본 형태
router.get('/', function(req, res, next){
});​

 

  : express 서드파티 모듈은 node.js에서 http, connect 컴포넌트를 기반으로 한 웹 프레임워크

 

    - 첫 번째 파라미터 : 요청경로 

    - 두 번째 파라미터 : callback 함수

 

 

  * 요청경로 형태는 다음과 같음

 

    1) ab?cd     →   /abcd, /acd, 존재하거나 존재하지 않음

    2) /ab+cd   →   /abcd, abbcd, 하나 또는 그 이상

    3) /ab*cd    →   /abcd, abxcd, abkdcd, 중간에 아무 값이나 포함

    4) ab(cd)?e  →   /abe, /abcde

    5) /.*fly$/    →   /butfly, /drafly, fly로 끝나는

 

 

 

* Express Router의 Response

 

메소드 내용
res.download() 파일 다운로드 가능
res.end() 응답 프로세스 종료
res.json() JSON 응답 전송
res.jsonp() JSON 응답 전송(JSONP 지원)
res.redirect() 요청경로를 재지정
res.render() 보기 템플릿을 렌더링
res.send() 다양한 형태의 응답 전송
res.sendFile() 파일을 옥텟 스트림 형태로 전송
res.sendStatus() 응답상태코드 설정 후 해당 코드를 문자열로 표현한 내용을 응답 본문으로 전송

 

 

 

* Routing

 

 : route를 하나의 파일에서 일일이 정의 하는 것은 비효율적이므로 요청을 분할 함. 즉, 각 router를 정의할 통합 router.js 파일에서 express,js 모듈의 router을 추출 후 각 router로의 경로를 지정. 

 app.js에서 각 모듈의 시작점을 지정하여 연결해 줄 예정

 

 

1. 사전 준비

https://bogyum-uncle.tistory.com/70

불러오는 중입니다...

 

2. routes 디렉토리, router1, router2.js 생성

 

  2.1. root/routes/router1.js

//함수로 만들어 객체 app을 전달
module.exports = function(app){

    var express = require('express');
    var router = express.Router();

    router.get("/", function(request, response){
        response.writeHead(200, {"Content-Type":"text/plain; charset=utf-8"});
        response.end("/r1 경로로 접근...!");
        console.log(response.statusCode);
    });

    router.get("/action", function(request, response){
        response.writeHead(200, {"Content-Type":"text/plain; charset=utf-8"});
        response.end("/r1/action 경로로 접근...!");
        console.log(response.statusCode);
    });

    //라우터 리턴
    return router;
}

 

  2.2. root/routes/router2.js

//함수로 만들어 객체 app을 전달
module.exports = function(app){

    var express = require('express');
    var router = express.Router();

    router.get("/", function(request, response){
        response.writeHead(200, {"Content-Type":"text/plain; charset=utf-8"});
        response.end("/r2 경로로 접근...!");
        console.log(response.statusCode);
    });

    router.get("/action", function(request, response){
        response.writeHead(200, {"Content-Type":"text/plain; charset=utf-8"});
        response.end("/r2/action 경로로 접근...!");
        console.log(response.statusCode);
    });

    //라우터 리턴
    return router;
}

 

  2.3. root/app.js 수정

//Express를 변수에 담기
var express = require("express");

//Express 호출 후 새로운 Express 애플리케이션을 변수(app)에 넣음
var app = express();

/**
 * Routing 경로 설정
 * 
 * app.js에서 생성된 데이터를 사용하기 위해서 require에서 app이란 객체를 전달
 */
app.use('/r1', require('./routes/router1')(app));
app.use('/r2', require('./routes/router2')(app));
app.use(function(request, response){
    //4XX : 클라이언트 오류
    response.statusCode = 404;
    response.end("404 Error!");
});

app.listen(3000, function(){
    console.log("Server Running : 3000....!");
})​

 

 

3. 확인

  3.1. TERMINAL > node app.js

  3.2. 브라우저 확인