파일로 데이터 저장하기 (데이터 입력)
//app.js
const fs = require('fs');
app.set('views'. './views_file');
app.set('view engine', 'jade');
app.post('/topic', function(req,res){
const title = req.body.title;
const desc = req.body.desc;
fs. writeFile('data/'+title, desc, function(err){
if(err){
console.log(err);
res.status(500).send('Internal Server Error'); // status(500) : 오류
}
res.send('Success!');
});
}
})
//form.jade
doctype html
html
body
form(action = '/form_receiver'. method='post')
p
input(type = "text" name = 'title')
p
textarea(name = 'desc')
파일로 저장된 데이터 읽어오기 (데이터 출력)
1. topic 페이지에 데이터 목록 만들기
//app.js
app.get('/topic', function(req,res){
fs.readdir('data', function(err, files){ //읽어올 폴더명, 읽어온 후 결과(err, 결과 list객체)가 들어간 callback함수
if(err){
console.log(err);
res.status(500).send("Internal Server Error");
}
res.render('view',{topics:files}); //렌더링 할 jade 파일명, jade파일로 보내줄 데이터가 들어간 객체
//readdir 결과인 files를 topics이라는 이름으로 jade파일로 전달
})
});
//.views_file/view.jade
doctype html
html
body
ul
each topic in topics
li
a(href="/topic/"+topic)=topic //=은 변수라는 뜻
jade 결과
2. topic/:id에서 desc 읽기
//app.js
app.get('/topic/:id', funciont(req,res){
const id = req.params.id;
fs.readdir('data', function(err, files){ //읽어올 폴더명, 읽어온 후 결과(err, 결과 list객체)가 들어간 callback함수
if(err){
console.log(err);
res.status(500).send("Internal Server Error");
}
fs.readFile('data/'+id,'utf8', function(err, data){
if(err){
console.log(err);
res.status(500).send("Internal Server Error");
}
}
res.render('view',{topids:files, title:id, desc:data});
})
})
})
//.views_file/view.jade 수정
doctype html
html
body
ul
each topic in topics
li
a(href="/topic/"+topic)=topic //=은 변수라는 뜻
article
h2 = title
= desc
더보기
단순 데이터를 가져오기 = get방식
3. 코드 개선
//app.js
app.get(['/topic','/topic/:id'], funciont(req,res){
fs.readdir('data', function(err, files){ //읽어올 폴더명, 읽어온 후 결과(err, 결과 list객체)가 들어간 callback함수
if(err){
console.log(err);
res.status(500).send("Internal Server Error");
}
const id = req.params.id;
if(id){ //id가 존재할 때
fs.readFile('data/'+id,'utf8', function(err, data){
if(err){
console.log(err);
res.status(500).send("Internal Server Error");
}
res.render('view',{topids:files, title:id, desc:data});
})
}else { //id가 없을 때
res.render('view',{topids:files, title:'welcome', desc:'hello js'});
}
})
});
//.views_file/view.jade 수정
doctype html
html
body
h1
a(href="/topic") Server side js
ul
each topic in topics
li
a(href="/topic/"+topic)=topic //=은 변수라는 뜻
article
h2 = title
= desc
div
a(href="/topic/new") new
readdir 부분 중복개선
id값의 유무에 따라 view template 렌더링에 주는 데이터를 다르게 한다.
redirect
//app.js
const fs = require('fs');
app.set('views'. './views_file');
app.set('view engine', 'jade');
app.post('/topic', function(req,res){
const title = req.body.title;
const desc = req.body.desc;
fs. writeFile('data/'+title, desc, function(err){
if(err){
console.log(err);
res.status(500).send('Internal Server Error'); // status(500) : 오류
}
res.redirect('/topic/'+title);
});
}
})
더보기
res.redirect('/topic/'+title);
'Nodejs' 카테고리의 다른 글
[Node.js] 프로젝트 생성 및 mongoDB 연결하기 (0) | 2021.10.08 |
---|---|
[Node.js] supervisor 서버 자동on/off (0) | 2021.09.23 |
[Node.js] url 해부하기(query, params), Form으로 데이터 전달 (0) | 2021.09.23 |
[Node.js] express와 jade 설치 및 사용법 (0) | 2021.09.16 |
[Node.js] 동기, 비동기 (0) | 2021.09.15 |