본문 바로가기
Nodejs

[node.js] express 라우팅 기본 예제

by teamnova 2023. 4. 30.
728x90

오늘은 ejs + node.js + express를 활용하여 간단한 서버를 구축해보겠습니다. 

 

 

 

 

디렉토리 구조는 다음과 같습니다. 프로젝트 디렉토리 내부에 public, routes, views 폴더와 app.js 파일을 만들어줍니다.

 

 

 

app.js

 

let createError = require('http-errors'); // http 에러 처리용 모듈
let express = require('express'); // express 프레임워크를 사용하기 위한 모듈
let path = require('path'); // 프로젝트 내부에서, 파일들의 상대경로를  위한 모듈
let cookieParser = require('cookie-parser'); // 쿠키값을 다루기 위해 필요한 모듈
let logger = require('morgan'); // 로그를 보기 쉽게 찍기 위한 모듈

// 라우팅을 해줄 경로 설정
let indexRouter = require('./routes/index');
const http = require("http");

// 여기서 만든 app객체로 모든 요청·응답을 진행함
let app = express();

// 뷰 엔진으로 뭘 쓸지 정함. 우리는 ejs 사용.
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

// app객체가 외부 모듈을 사용할 수 있도록 .use(모듈)을 해줌
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

// 요청이 '/'이라면 indexRouter으로 연결을 한다는 의미
// 위에서 설명했듯, indexRouter는 './routes/index'으로 설정되어있음
// 따라서 요청이 '/'이면 './routes/index'로 경로를 잡음
app.use('/', indexRouter);

// 404에러를 잡아내고 예외처리해줌
app.use(function(req, res, next) {
    next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
    // set locals, only providing error in development
    res.locals.message = err.message;
    res.locals.error = req.app.get('env') === 'development' ? err : {};

    // render the error page
    res.status(err.status || 500);
    res.render('error');
});

// 호스트이름, 포트 설정
const hostname = '127.0.0.1';
const port = 3000;

// app객체를 실행할 server객체를 만듦
const server = http.createServer(app);

// hostname, port에 대해 server객체가 listen하기 시작함.
server.listen(port, hostname, () => {
    console.log(`Server running at http://${hostname}:${port}`);
});

// 위에서 정한 app 객체를 모듈화하여 다른 파일들과 소통할 수 있도록 함.
module.exports = app;

 

 

 

 

 

위 작업을 마친후, 터미널을 열고 다음 명령어를 입력합니다.

 

1. npm init

 

 

2. npm init 을 입력하면, package.json파일을 만들기 위해 package name, version 등 여러가지 입력을 해야하는 부분이 있는데, 엔터를 연속으로 눌러서 이 과정을 생략합니다. 

 

3. 그러면 다음과 같은 파일이 생성되고, 

 

 

 

 

4. package.json 파일에 아래 코드를 추가합니다.

"scripts": {
  "start": "node app.js",
  "test": "echo \"Error: no test specified\" && exit 1"
},
"dependencies": {
  "cookie-parser": "~1.4.4",
  "debug": "~2.6.9",
  "ejs": "~2.6.1",
  "express": "~4.16.1",
  "http-errors": "~1.6.3",
  "morgan": "~1.9.1"
},

 

 

 

 

5. 최종적으로 package.json은 아래와 같은 형식을 띕니다.

 

 

 

 

6. 이제 프로젝트에 dependencies를 설치하면 됩니다.

npm install

 

 

 

 

 

이제 기본적인 밑작업은 끝냈습니다.

위 작업을 마친 후, routes와 views 디렉토리에 index.js, error.ejs, index.ejs 를 추가해줍니다. 

 

 

 

 

index.js

// app.js와 연결하기 위해 필요한 코드
var express = require('express');
var router = express.Router();

// app.js에서 언급했던, '/'요청이 오면 라우팅을 해주는 코드입니다.
router.get('/', function(req, res, next) {
  // req : ~~한 요청이 app.js에서 왔다.
  // res : 그래서 ~~한 응답을 보낸다.
  // res.render('응답을 할 경로', {변수명:'값'})
  //    응답을 할 경로로 index.ejs 혹은 index.js라고 하지 않은 이유는,
  //    app.js에서 선언했듯 뷰엔진으로 ejs를 사용하기로 정했기 때문임.
  //    따라서 index라고 작성해도 index.ejs로 전달됨
  res.render('index', { title: 'Express' });
});

// 위에서 정한 router 객체를 모듈화하여 다른 파일들과 소통할 수 있도록 함.
module.exports = router;

 

 

 

index.ejs

<!DOCTYPE html>
<html>
<head>
    <!--  res.render('응답을 할 경로', {변수명:'값'})-->
    <!--  res.render('index', {title:'Express'})-->
    <!--  index.js가 전달한 변수인 title에 'Express'라는 값을 담아뒀기 때문에, -->
    <!--  화면에 'Express'가 출력됩니다.  -->
    <title><%= title %></title>
    <link rel='stylesheet' href='/stylesheets/style.css'/>
</head>
<body>
<h1><%= title %></h1>
<p>Welcome to <%= title %></p>
</body>
</html>

 

 

 

 

error.ejs

<!--이 부분은 다음에 포스팅하겠습니다.-->
<h1><%= message %></h1>
<h2><%= error.status %></h2>
<pre><%= error.stack %></pre>

 

 

 

 

 

모든 준비가 끝났습니다.

터미널에 아래 코드를 입력하여 실행합니다.


npm start

 

 

 

 

 

결과