// 익스프레스 설정
var express = require('express');
var app = express();
// POST 전송을 위한 body-parser 설정 -> bodyParser의 Install 이 먼저 선행되어야 함.
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({extended:false}));
// 파일처리를 위한 객체생성
var fs = require('fs');
// 템플릿 엔진을 EJS 로 설정함, 뷰 파일이 저장될 폴더는 ./views_file 임.
app.set('views', './views_file');
app.set('view engine', 'ejs');
// 새로운 글 작성할 때 접근할 주소인 /new 라우팅
app.get('/topic/new', function(req, res){
// 폴더 내에 있는 파일목록을 읽어들여서 객체를 반환하는 readdir 메소드
fs.readdir('data', function(err, files){
if(err){
// 에러인 경우는 에러내역을 콘솔에 출력 후 화면에 에러메세지를 표시함.
console.log(err);
res.status(500).send('Internal Server Error');
}
// 정상적으로 처리된 경우에는 new.ejs 파일을 렌더링하고 topics 라는 이름으로 files 객체를 전달함.
res.render('new', {topics:files});
});
});
// 글 목록과 내용을 표시할 때 접근할 주소인 /topic 임. 링크를 통해서 id값을 받고, 파일명과 동일한 경우 내용을 표시함.
app.get(['/topic', '/topic/:id'], function(req, res){
fs.readdir('data', function(err, files){
if(err){
console.log(err);
res.status(500).send('Internal Server Error');
}
// 쿼리스트링으로 넘어 온 값을 id 변수에 저장한다.
var id = req.params.id;
if(id)
{
// id가 전달된 경우에는 id와 같은 파일명을 가진 파일을 읽어온다.
fs.readFile('data/'+id, 'utf8', function(err, data){
if(err){
console.log(err);
res.status(500).send('Internal Server Error');
}
// view에 파일객체, 파일명, 파일내용을 넘기고 렌더링한다.
res.render('view', {topics:files, title:id, description:data});
});
}
else
{
// id가 전달이 안 된 경우에는 기본값을 표시한다.
res.render('view', {topics:files, title:'Welcome', description:'Hello, Node.js'});
}
});
});
// 글 작성 페이지에서 Submit 버튼을 누른 경우 POST로 값을 받은 후 파일작성 & 리다이렉트 처리
app.post('/topic', function(req, res){
// view의 body 태그에서 title과 description 값을 받아와서 변수에 할당함.
var title = req.body.title;
var description = req.body.description;
// 파일객체를 이용해서 data 폴더 안에 title을 파일명으로 하고 description을 내용으로 하는 파일을 생성함.
fs.writeFile('data/' + title, description, function(err){
if(err){
console.log(err);
res.status(500).send('Internal Server Error');
}
// 저장 후 해당 파일명을 쿼리스트링으로 넘기고 리다이렉트 시켜서 내용 & 리스트를 표시
res.redirect('/topic/'+title);
});
});
// 3000번 포트를 listing
app.listen(3000, function(){
console.log('Connected, 3000 port!!!');
});
댓글
댓글 쓰기