본문 바로가기

Nodejs

[Nodejs] Express를 사용한 HTML 라우팅(Routing) / Webstrom개발환경/ Express /

# Express를 사용한 HTML 라우팅(Routing)


Why?

  • 프로젝트 방향이 Node는 웹 화면을 띄우기위한 웹 서버 역활로 확정.
  • 데이터는 Spring서버를 이용하기로 결정.
  • 따라서 Node에서의 역할은 라우터를 이용하여 주소별로 웹을 나뉘어주는 역할.

How ?

  • Server / Route / View로 구성하여 역할을 구분.
  • Server - ‘Express’ 사용, EJS사용 , 라우터 경로 설정
  • Router - 접속경로( 회사 / 고객페이지) 에 따라 경로구분.
  • View - Html기반의 화면소스 (+부트스트랩)

Problem

생활 코딩 및 블로그에서는 화면부분에 HTML이 아닌 EJS를 사용하여 출력을 하는데,
그렇게되면 현재 html로 제작된 페이지를 모두 ejs로 변환해야한다.
라우터(Router)에서 EJS가 아닌 HTML을 사용하는 방법을 찾자.


소스코드

Server.js

/**
 * Created by JK on 2016-08-30.
 */

// Express 서버생성
var express = require('express');
var app = express();

// 10-1 내용 추가
var bodyParser = require('body-parser');

// express-session이 error발생 -> Cmd -> "npm install express-session" 으로 설치완료.
var session = require('express-session');
var fs = require("fs")

// 서버가 읽을 수 있도록 HTML 의 위치를 정의해줍니다.
app.set('views', __dirname + '/views');

// 서버가 HTML 렌더링을 할 때, EJS엔진을 사용하도록 설정합니다.
app.set('view engine', 'ejs');
app.engine('html', require('ejs').renderFile);

var server = app.listen(3000, function(){
    console.log("Express server has started on port 3000")
});

// 스타일(CSS) 적용하기
app.use(express.static('public'));

// "localhost:3000/dudukri"으로 접속 -> 농부페이지
var routes = require('./routes/dudukri_server_html');
app.use('/dudukri', routes);

var users = require('./routes/users');
app.use('/users', users);

Routes(라우터)

/**
 * Created by JK on 2016-08-30.
 */

module.exports = function(app)
{
    console.log("START Dudukri")

    app.get('/', function(req, res){

        console.log("START /")
        res.render('index.html');
    })

    app.get('/company', function(req, res){

        console.log("start dudukri/company");

        res.render('dudukri_company/main.html');
    })

    app.get('/farmer', function(req, res){

        res.render('dudukri_farmer/main.html');
    })
}

View(Html소스)

(로그인 부분 일부 예시)

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Bootsrtap Free Admin Template - SIMINTA | Admin Dashboad Template</title>
    <!-- Core CSS - Include with every page -->
    <link href="assets/plugins/bootstrap/bootstrap.css" rel="stylesheet" />
    <link href="assets/font-awesome/css/font-awesome.css" rel="stylesheet" />
    <link href="assets/plugins/pace/pace-theme-big-counter.css" rel="stylesheet" />
    <link href="assets/css/style.css" rel="stylesheet" />
    <link href="assets/css/main-style.css" rel="stylesheet" />
    <link href="assets/css/custom.css" rel="stylesheet" />

</head>

<body class="body-Login-back">

<nav class="navbar navbar-default navbar-fixed-top" role="navigation" id="navbar">
    <!-- navbar-header -->
    <div class="navbar-header">
        <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".sidebar-collapse">
            <span class="sr-only">열기</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
        </button>
        <a class="navbar-brand" href="main.html">
            <img src="assets/img/logo.png" alt="" />
        </a>
    </div>
</nav>
<!-- end navbar top -->

    <div class="container">

        <div class="row">
            <div class="col-md-4 col-md-offset-4 text-center logo-margin ">
              <img src="assets/img/logo.png" style="margin-left: -10px"; height=100px alt=""/>
                </div>
            <div class="col-md-4 col-md-offset-4">
                <div class="login-panel panel panel-default">                  
                    <div class="panel-heading">
                        <h3 class="panel-title">로그인</h3>
                    </div>
                    <div class="panel-body">
                        <form role="form">
                            <fieldset>
                                <div class="form-group">
                                    <input class="form-control" placeholder="ID" name="acountID" type="text" autofocus>
                                </div>
                                <div class="form-group">
                                    <input class="form-control" placeholder="Password" name="password" type="password" value="">
                                </div>
                                <div class="checkbox save-login">
                                    <label>
                                        <input name="remember" type="checkbox" value="Remember Me">저장하기
                                    </label>
                                    <a class="register" href="resister.html">회원가입</a>
                                </div>
                                <!-- Change this to a button or input when using this as a form -->
                                <a href="main.html" class="btn btn-lg btn-primary btn-block">로그인</a>
                            </fieldset>
                        </form>
                    </div>
                </div>
            </div>
        </div>
    </div>

     <!-- Core Scripts - Include with every page -->
    <script src="assets/plugins/jquery-1.10.2.js"></script>
    <script src="assets/plugins/bootstrap/bootstrap.min.js"></script>
    <script src="assets/plugins/metisMenu/jquery.metisMenu.js"></script>

</body>

</html>

End

무엇보다 라우터 사용부분에서 기존소스 및 공부한 사이트(생활코딩 , 블로그 (이전 글을 보면 URL존재)) 를 보면 Html화면을 사용하지않고 .EJS 확장자로 사용한다.
이것을 어떻게 HTML로 해야하나 하면서 fs.readfile()을 사용하여 응답하고자할 html파일을 써서 보내는 삽질을 좀 하긴했지만 간단하게 Html로 보낼 수 있는 결과를 얻었다.

'Nodejs' 카테고리의 다른 글

Nodejs 장 단점  (0) 2016.09.27
[Nodejs] 'Express' 사용하기.  (0) 2016.08.27
[Nodejs] Nodejs 시작하기  (0) 2016.08.27