12_Node.js 파일 수정
12_Node.js 파일 Update
- App 제작 - 글 수정 - 수정 링크 생성
localhost:3000/?id=
수정 링크는 특정한 글이 선택되었을 때 나와야 한다.
//수정 링크 update 생성
${list}
<a href="/create">create</a> <a href="/update">update</a>
${body}
templateHTML에서 <a href="/update">update</a>
태그를 ${control}
표현식으로 수정한다.
//control 변수 추가
function templateHTML(title, list, body, control){
...
${control}
...
}
홈과 create 페이지에서는 update 태그가 나오지 않고, id 값을 클릭한 페이지에 update a태그를 나타낸다.
사용자한테 UI를 최소화한다.
특정한 글을 선택하고 update를 누르면 /update로 이동한다.
update를 하려면, 어떤 것을 업데이트 하는 지에 대한 정보가 필요하다
어떤 것을 수정할 지에 대한 정보를 쿼리 스트링을 통해서 전달하기.
`<a href="/create">create</a> <a href="/update">update</a>`를
`<a href="/create">create</a> <a href="/update?=${title}">update</a>` 로 수정
App 제작 - 글 수정 - 수정할 정보 전송
업데이트를 클릭했을 때 보여지는 화면 만들기
Form에서 수정할 정보가 보여지는 read 기능이 필요하다.
특정 글을 읽어오는 부분(id값이 있는 경우의 처리)이 필요하다.
//추가
else if (pathname === '/update') {
var template = templateHTML(title, list,
`<h2>${title}</h2>${description}`,
`<a href="/create">create</a> <a href="/update?=${title}">update</a>`
);
UI를 표시하는 부분<h2>${title}</h2>${description}
, 을 Form으로 바꾸기
<form action="http://localhost:3000/create_process" method="POST">
<p><input type="text" name="title" placeholder="title"></p>
<textarea name="description" placeholder="description"></textarea><p>
<input type="submit">
</form>
form submit 했을 때 보내지는 정보를 어디로 action 할 것인지 수정하기
action="http://localhost:3000/update_process"
action 수정 action="/update_process"
HTML의 input 태그는 value라는 속성이 있다. value=”${title}” 기본값이 들어옴
submit해서 수정한 파일 정보를 전송할 때 어떤 파일을 수정하는 것인지 알 수 있어야 한다.
title을 전송한 정보를 바탕으로 하면 문제가 생긴다. title을 수정하면 파일을 찾을 수 없게 된다.
사용자가 수정하는 정보를 식별해야한다.
<input type="text" name="id" value="${title}"> 추가한다
input type="hidden" 으로 수정하면 수정할 파일의 이름을 받는다.
App 제작 - 글 수정 - 파일명 변경, 내용 저장
update_process 받는 코드를 작성한다. post 방식으로 들어온 데이터를 받아야한다.
create_process의 코드를 복사하고, 받아올 id값을 추가한다.
var id=post.id;
var post = qs.parse(body);
console.log(post); 로 찍어보면
{
0|main | id: 'JavaScript',
0|main | title: 'uuuu',
0|main | description:
0|main | 'JavaScript ....' } //값을 확인 할 수 있다.
- 사용자가 파일의 제목을 변경했을 경우
nodejs file rename 구글링
syntax - Asynchronous
fs.rename(oldPath, newPath, callback)
fs.rename(`../nodejs1/data/${id}`, `../nodejs1/data/${title}`, function(err){
})
`수정하고자 하는 예전 파일 이름의 id값`, `새 파일은 데이터에 있는 title로 이름 바꾸기`, function(err){}
작업이 끝난 뒤에는 __callback function__을 실행하기.
파일의 제목을 바꾸고 submit하면 파일명이 바뀐 것을 확인 할 수 있다.
- 파일의 내용을 바꾸기
기존의 코드 재활용
fs.writeFile(`../nodejs1/data/${title}`, description, 'utf8', function(err){
response.writeHead(302, {Location : `/?id=${title}`});
response.end();
})
내용 재검토 해보기 fs.writeFile
- 파일의 이름을 수정한다음,
../nodejs1/data/${title}
- 수정된 파일 이름에 해당되는 것에 받은
description
정보를 주고 - 그 id값으로 들어간다
response.writeHead(302, {Location :
/?id=${title}});
파일 제목, 내용 수정 완료