[Node.JS] 실습 - NotePad 개발

Yubin.Heo·2020년 11월 28일
1

🎄 Node.JS 🎄

목록 보기
3/3
post-thumbnail

오늘은 fs 모듈과 express 모듈을 이용해서 웹 메모장을 만들어볼겁니다.
NotePad 시리즈는 DB에 저장하고 불러오기 까지 여러편에 나누어서 진행할거에요.

먼저 fs는 file system의 약자입니다.

필요한 모듈은 아래와 같습니다

  • express
  • fs
  • ejs(view)

🎍 실습

// app.js

const express = require('express');
const app = express();

const PORT = process.env.NODE_ENV === 'production' ? 3000 : 3000;

app.set('view engine','ejs');
app.set('views','./views');

app.use(express.json());
app.use(express.urlencoded({ extended: false }));

app.use(express.static(__dirname + '/public'));

const index = require('./run/index');

app.use("/", index);
app.post("/save", index);

app.listen(PORT, () => {
    console.log(`server run ${PORT} port.`);
});

워낙 기본적인 코드다 보니 설명하지 않고 넘어가겠습니다.

// run/index.js

const express = require('express');
const router = express.Router();
const fs = require('fs'); 
 
router.get('/', function(req, res, next) {
    res.render('index');
});

router.post('/save', function (req, res, next) {
    const { title, contents } = req.body;
    const fileName = `${title}.txt`;

    fs.writeFile(fileName, contents, 'utf8', function(error){ 
        if(error) { throw error; }

        console.log("저장 완료!");
        res.render("index");
    });

});

module.exports = router;
// views/index.ejs

<!DOCTYPE html>
<html lang="kr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Test</title>
</head>
<body>
    <h1>Hello World</h1>

    <form action="/save" method="post">
        <input type="text" name="title" id="title"> <br>
        <textarea name="contents" id="contents" cols="60" rows="30"></textarea> <br>
        <input type="submit" value="okay">
    </form>
</body> 
</html>

🎠 fs - 쓰기

fs.writeFile(파일 이름, 내용, 'utf8', function(error){ ... }

위 코드를 이용해 txt파일을 생성하고 작성할 수 있습니다.
writeFile() 함수는, 파일에 내용을 쓰는 함수 입니다.
만약 파일이 없다면 생성해서 내용을 작성합니다.
(주의하실 점은, 있는 파일의 내용을 이어서 쓰진 않습니다)

🎨 fs - 이어쓰기

fs.appendFile(파일 이름, 내용, function (err) { ... }

위 코드를 이용하면 파일이 있는 경우 그 내용을 이어쓰고,
없는 경우 새로 생성해서 작성합니다.

🎫 fs - 삭제

fs.unlink(파일 이름, function (err) { ... }

위 코드를 사용하면 해당 파일을 삭제시킬 수 있습니다.

🩱 fs - 이름 변경

fs.rename(원래이름, 바꿀이름, function (err) { ... }

위 코드를 사용하면 원본 파일의 이름을 바꿀 수 있습니다.
(두 옵션 모두 확장자까지 기술해야 하고,
이미 있는 파일명을 입력하면 오류가 발생합니다)

🥽 fs - 읽기

fs.readFile(파일명, 'utf8', function(err, data) { 
	console.log(data); 
});

위 내용을 사용하면 파일을 읽어 출력할 수 있습니다.
(없는 파일을 입력하면 오류가 발생합니다)

🎭 번외 - 오류처리

대부분의 함수가 파일이 없을 경우 에러를 발생시킵니다.
만약 오류가 발생했을 경우, 다시 한번 기회를 주고싶다면
아래와 같은 코드를 입력하세요.

fs.writeFile(fileName, contents, 'utf8', function(error){ 
    if(error) { 
        console.log(error + " \n 오류가 났다."); 
        res.render("index"); 
    } else {
        console.log("저장 완료!");
        res.render("index");
    }
});

다음장엔 파일 리스트를 불러와서 읽고 삭제하고 이름을 변경하는
기능을 구현해보겠습니다.

감사합니다.

0개의 댓글