리셋 되지 말자

글수정-수정된 내용 저장 본문

NodeJS/생활코딩

글수정-수정된 내용 저장

kyeongjun-dev 2020. 9. 11. 16:50

update_process 작성

else if(pathname === '/update_process'){
    var body = '';
    //POST 방식으로 데이터를 보낼 때, 데이터가 한번에 너무 많으면, 특정한 양(조각)을 수신할 때마다 서버는 콜백 함수를 호출하도록 약속되어 있다.
    request.on('data', function (data) {
      body = body + data; // 콜백이 실행될 때마다 데이터를 추가
      if (body.length > 1e6) request.connection.destroy(); // 데이터가 너~무 많으면 연결을 강제로 종료
    });

    //Data가 조각 조각 들어오다가 더이상 데이터가 않오면 이게 실행되고, 콜백 함수가 실행됨
    request.on('end', function () {
      //정보를 qs 모듈로 post라는 객체로 객체화
      var post = qs.parse(body); // 지금까지 저장한 body 데이터를 querystring 모듈의 parse를 사용하면 post데이터의 post 정보가 들어있다.
      var title = post.title;
      var postId = post.id;
      var description = post.description;

      console.log(post);

      // // data 디렉토리에 title이름으로 된 description 내용의 파일 생성
      // fs.writeFile(`data/${title}`, description, 'utf8', function (err) {
      //   // writehead의 200은 성공했다는 뜻, 302는 페이지를 다른곳으로 redirection하라는 뜻
      //   response.writeHead(302, { Location: `/?id=${title}` });
      //   response.end();
      // });
    });
  }

위처럼 작성한 뒤, 새로운 항목인 id값을 받을 postId를 새롭게 선언하고, 전송된 내용을 확인한다.

id, title, description이 잘 오는것을 확인

파일 제목 및 내용 수정

create_process에서는 파일을 생성할 때 내용을 입력하는 것이었으므로 새로운 fileSystem의 기능이 필요해 보임

위를 참고하여 코드를 작성

      var post = qs.parse(body); // 지금까지 저장한 body 데이터를 querystring 모듈의 parse를 사용하면 post데이터의 post 정보가 들어있다.
      var title = post.title;
      var postId = post.id;
      var description = post.description;

      console.log(post);

      fs.rename(`data/${postId}`, `data/${title}`, (err)=>{
        if(err) throw err;
        console.log('rename completed!!');
      })

위처럼 구성한 뒤, 실행한 결과는 아래와 같다.

파일 이름은 수정이 되었는데, 내용은 수정이 되지 않았다.

이를 참고하여 주석처리한 fs.writeFile을 작성해보자

      fs.rename(`data/${postId}`, `data/${title}`, (err)=>{
        if(err) throw err;
        console.log('rename completed!!');
      });

      // data 디렉토리에 title이름으로 된 description 내용의 파일 생성
      fs.writeFile(`data/${title}`, description, 'utf8', function (err) {
        // writehead의 200은 성공했다는 뜻, 302는 페이지를 다른곳으로 redirection하라는 뜻
        response.writeHead(302, { Location: `/?id=${title}` });
        response.end();
      });

rename과 write를 작성했는데, 갑자기 권한 에러가 난다.

왜 에러가 갑자기 생기는지 생각을 해보았는데, 원래 있던 NodeJS4 파일을 지우고 NodeJS파일을 새롭게 생성했다. (제목수정이 되는지 테스트를 여러번 진행하다 보니, 숫자가 커져서)

이때 NodeJS파일 생성은 vscode상에서 바로 진행했다. 즉, 웹브라우저에서 생성한게 아니다.

파일에대한 권한도 다 동일한데 이상...

한번 다시 또 도전

역시 실패

stackoverflow.com/questions/39293636/npm-err-error-eperm-operation-not-permitted-rename/45840283

[

npm ERR! Error: EPERM: operation not permitted, rename

When I execute npm install I get this error npm ERR! Error: EPERM: operation not permitted, rename C:\projects******\node_modules\react-async-script' -> 'C:\projects*******\node_modules.react-a...

stackoverflow.com

](https://stackoverflow.com/questions/39293636/npm-err-error-eperm-operation-not-permitted-rename/45840283)

여기서 말한 대로, git bash를 관리자 권한으로 실행 후, 'npm install' 을 했더니 rename 동작...

한번 되고나서 안된다.... 대체 머가 문제일까....

에러 해결 본격적으로 시작

      fs.rename(`data/${postId}`, `data/${title}`, (err)=>{
        if(err) throw err;
        console.log('rename completed!!');
      });

      // // data 디렉토리에 title이름으로 된 description 내용의 파일 생성
      // fs.writeFile(`data/${title}`, description, 'utf8', function (err) {
      //   // writehead의 200은 성공했다는 뜻, 302는 페이지를 다른곳으로 redirection하라는 뜻
      //   response.writeHead(302, { Location: `/?id=${title}` });
      //   response.end();
      // });

위처럼 다시 주석 처리를 하면 변경이 잘 됨.

      fs.rename(`data/${postId}`, `data/${title}`, (err)=>{
        if(err) throw err;
        fs.writeFile(`data/${title}`, description, 'utf8', function (err) {
          // writehead의 200은 성공했다는 뜻, 302는 페이지를 다른곳으로 redirection하라는 뜻
          response.writeHead(302, { Location: `/?id=${title}` });
          response.end();
        });
        console.log('rename completed!!');
      });

위처럼 fs.writeFile을 rename안에 작성하고 테스트

잘된다...

해결 완료

'NodeJS > 생활코딩' 카테고리의 다른 글

글 삭제-삭제 기능 완성  (0) 2020.09.11
글 삭제-삭제 버튼 생성  (0) 2020.09.11
글수정-수정할 정보 전송  (0) 2020.09.10
글수정-수정링크 생성  (0) 2020.09.10
파일생성과 redirection  (0) 2020.09.10
Comments