${control}
을 통해 함수의 매개변수로 받아온다. <a href="/create">create</a>
<a href="/create">create</a> <a href="/update">update</a>
(공백)<a href="/update">update</a>
<a href="/update?id=${title}">update</a>
else if (pathname === '/update') { }
else if(pathname === '/update'){
fs.readdir('./data', function(error, filelist){
fs.readFile(`data/${queryData.id}`, 'utf8', function(err, description){
var title = queryData.id;
var list = templateList(filelist);
var template = templateHTML(title, list,
//html form 작성 파트,
`<a href="/create">create</a> <a href="/update?id=${title}">update</a>`
);
response.writeHead(200);
response.end(template);
});
});
<form action="/update_process" method="post">
<p><input type="text" name="title" placeholder="title" value="${title}"></p>
<p>
<textarea name="description" placeholder="description">${description}</textarea>
</p>
<p>
<input type="submit">
</p>
</form>
input 태그의 value 속성 : 기본값을 설정할 수 있다.
textarea 태그의 기본 값은 <textarea></textarea>
내부에 입력할 수 있다.
주의 사항 : 사용자가 title을 수정할 수 있기 때문에, 사용자가 입력한 title 값을 기반으로 수정할 대상이 될 파일을 찾으면 안된다.
-> 따라서 처음 불러온 파일 제목 (수정할 대상이 될 파일명) 과, 사용자가 입력한 파일 제목 (새로운 값) 이 둘다 별도로 웹서버로 전송되어야 한다.
처음 불러온 파일 제목 (수정할 대상이 될 파일명) 은 사용자가 접근할 수 없어야 하기 때문에, input 태그의 hidden type 을 통해 사용자에게 보이지는 않지만 기존 파일제목을 기본값으로 갖고 있는 input 칸을 form에 추가하여 웹서버로 함께 보낸다. (물론 name은 사용자의 입력칸인 title과 다른 이름으로 설정해야 한다 ex- id)
<input type="hidden" name="id" value="${title}">
최종 form
<form action="/update_process" method="post">
<input type="hidden" name="id" value="${title}">
<p><input type="text" name="title" placeholder="title" value="${title}"></p>
<p>
<textarea name="description" placeholder="description">${description}</textarea>
</p>
<p>
<input type="submit">
</p>
</form>
else if (pathname === '/update_process')
var body = '';
request.on('data', function(data){
body = body + data;
});
request.on('end', function(){
var post = qs.parse(body);
var id = post.id;
var title = post.title;
var description = post.description;
//여기까지 데이터 수신.
});
});
현재까지 post에 담기는 수신 데이터 형태
{ id : '수정할 대상 파일',
title : '수정한 파일명',
description : '수정한 본문' }
앞으로 해야할 일은
fs.rename(oldPath, newPath, callback)
data/${id}
data/${title}
fs.wrtieFile(파일경로, 본문내용, 'utf8', callback)
data/${title}
response.writeHead(302, {Location: `/?id=${title}`});
response.end();
최종적으로 update_process에 대한 처리는 다음과 같다.
else if(pathname === '/update_process'){
var body = '';
request.on('data', function(data){
body = body + data;
});
request.on('end', function(){
var post = qs.parse(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.writeHead(302, {Location: `/?id=${title}`});
response.end();
})
});
});
}