Express의 주요 기능 두 가지
- Route
- Middleware
app.post('/create_process', function(request, response) {
var body ='';
request.on('data', function(data){
body = body + data;
}); //데이터가 추가될 때마다 request.on() 함수가 호출되는데 body 변수에 데이터가 도착할 때마다 추가한다.
//post 방식은 데이터는 크기가 클 수도 있기 때문에 이 방법을 사용
request.on('end', function(){ //request.on('end') 이벤트가 발생하면 이제 받은 데이터들을 처리한다.
var post = qs.parse(body); //입력값을 post에 저장. 즉 post data임.
var title = post.title;
var description = post.description;
fs.writeFile(`data/${title}`, description, 'utf8', function(err){
response.writeHead(302, {Location: `/?id=${title}`}); //302: 일시적으로 보낸다. location에 적힌 주소로 리다이렉션
response.end();
})
});
});
app.use(bodyParser.urlencoded({ extended: false}));
create_process 페이지 코드 (body-parser 적용)
app.post('/create_process', function(request, response) {
var post = request.body; //수정
var title = post.title;
var description = post.description;
fs.writeFile(`data/${title}`, description, 'utf8', function(err){
response.writeHead(302, {Location: `/?id=${title}`});
response.end();
});
});
코드가 훨씬 간단해졌다! update_process, delete_process 코드도 위와 같이 수정한다.
app.post('/update_process', function(request, response) {
var post = request.body;
var id = post.id;
var title = post.title;
var description = post.description;
fs.rename(`data/${id}`, `data/${title}`, function(error) {
fs.writeFile(`data/${title}`, description, 'utf8', function(err){
response.redirect(`/?id=${title}`); //express 에서 redirect
})
});
});
app.post('/delete_process', function(request, response) {
var post = request.body;
var id = post.id;
var filteredId = path.parse(id).base;
fs.unlink(`data/${filteredId}`, function(error) {
response.redirect('/'); //express 에서 redirect
});
});
이렇게 많은 양의 데이터를 그댈 받아와서 로딩하려고 하면 효율적이지 않다.
그래서 사용하는 것이 compression 미들웨어!
app.use(compression()); //compression 미들웨어 사용
파일 목록을 가져오는 미들웨어를 만들었다.
app.get('*', function(request, response, next) { //get방식일 때 모든 경우 호출
fs.readdir('./data', function(error, filelist) { //데이터 디렉토리 목록을 가져와서 filelist 변수가 셋팅된다.
request.list = filelist; //request 객체의 list 변수에 filelist 값을 준다.
next(); //next: 그 다음에 호출되어야 할 미들웨어가 담겨있다. 다음 미들웨어 실행.
});
});
각 코드에서 가져다 쓴다
app.get('/', function(request, response) {
var title = 'Welcome';
var description = 'Hello, Node.js';
var list = template.list(request.list); //가져다 씀!
var html = template.HTML(title, list,
`<h2>${title}</h2>${description}`,
`<a href="/create">create</a>`
);
response.send(html);
});
미들웨어를 사용하면 코드가 간결해진다!