본문 바로가기

Javascript/Node.js

방명록 웹 애플리케이션 만들기

반응형

방명록 웹 애플리케이션 만들기

지금까지 공부한 내용을 복습하기위해 간단한 애플리케이션 제작.

1. 준비

1) npm init 명령으로 package.json 파일 만들기.

2) 필요한 npm 모듈 설치 (npm install express morgan body-parser ejs --save)


2. 코딩

app.js

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
var http = require("http");
var path = require("path");
var express = require("express");
var logger = require("morgan");
var bodyParser = require("body-parser");
 
var app = express();
 
app.set("views",path.resolve(__dirname,"views"));
app.set("view engine","ejs");
 
var entries = []; // 모든 글을 저장할 배열
app.locals.entries = entries;
//모든 뷰에서 배열을 사용할 수 있게 함
 
app.use(logger("dev"));
 
app.use(bodyParser.urlencoded({extended:false}));
// 사용자가 폼을 전송할 때 req.body라는 변수에 담음
// 루트경로로 왔을때 index 파일 렌더링
app.get("/",function(request,response){
  response.render("index");
});
// new-entry경로로 get으로 왔을 때 new-entry 렌더링
app.get("/new-entry",function(request,response){
  response.render("new-entry");
});
// new-entry에서 post 폼이 있을 때 아래 코드를 통해 방명록 입력하고
// redirect를 통해 루트경로로 감
app.post("/new-entry",function(request,response){
  if(!request.body.title || !request.body.body){
    response.status(400).send("제목과 내용을 입력하세요");
    return;
  }
  entries.push({
    title : request.body.title,
    content : request.body.body,
    published : new Date()
  });
  response.redirect("/");
});
app.use(function(request,response){
  response.status(404).render("404");
})
http.createServer(app).listen(3000,function(){
  console.log("Guestbook app started on port 3000.");
});
 



index.ejs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<% include header %>
<if(entries.length) {%>
  <% entries.forEach(function(entry){ %>
  <div class="panel panel-default">
    <div class="panel-heading">
      <div class="text-muted pull-right">
        <%= entry.published %>
      </div>
      <%= entry.title %>
    </div>
    <div class="panel-body">
      <%= entry.content %>
    </div>
  </div>
  <% }) %>
  <% } else{ %>
    글이 없습니다.<a href="/new-entry">작성하기</a>
  <% } %>
<% include footer %>
 



header.ejs

1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Express Guestbook</title>
  <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
</head>
<body class="container">
  <h1>
    Express Guestbook
    <a href="/new-entry" class="btn btn-primary pull-right">방명록쓰기</a>
  </h1>
 
cs

부트스트랩 사용했습니다.


footer.ejs

1
2
3
</body>
</html>
 



404.ejs

1
2
3
4
<% include header %>
<h2> 404! 페이지를 찾을 수 없습니다. </h2>
<% include footer %>
 




new-entry.ejs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<% include header %>
<h2>작성하기</h2>
<form method="post" role="form">
  <div class="form-group">
    <label for="title">제목</label>
    <input type="text" class="form-control" id="title" name="title" placeholder="제목" required />
  </div>
  <div class="form-group">
    <label for="content">내용</label>
    <textarea class="form-control" id="body" name="body" placeholder="내용" rows="3" required></textarea>
  </div>
  <div class="form-group">
    <input type="submit" class="btn btn-primary" value="등록" />
  </div>
</form>
 
<% include footer %>
 
cs

명령프롬프트

morgan을 이용해서 로그가 찍히는 모습입니다.


디렉토리 구조

디렉토리에서 파일 위치 확인.


npm start 명령 이용하는 방법

package.json 파일에서 "scripts"에 "start" : "node app" 이라고 작성하면 됩니다.

뜻은 npm start가 node app.js 명령어를 대신한다는 뜻.

"start" : "node apppppppp" 이렇게 적어놓으면 npm start를 했을 때

apppppppp.js 파일을 찾아서 실행시킵니다.


웹 애플리케이션 화면


* 따로 방명록을 읽거나 수정하거나 삭제하는 기능은 없지만 간단하게 작성하고 전체적으로 볼 수 있는 웹 애플리케이션을 만들었습니다.

app.js 파일을 보면 알다시피 간단하게 코딩했습니다. 오히려 ejs를 이용한 뷰에 시간(?)이 더 소요되는것을 알 수 있습니다.

ejs 보다 pug(jade)를 사용하면 시간 단축이 더 기대됩니다.

반응형