오늘은 fs 모듈과 express 모듈을 이용해서 웹 메모장을 만들어볼겁니다.
NotePad 시리즈는 DB에 저장하고 불러오기 까지 여러편에 나누어서 진행할거에요.
먼저 fs는 file system의 약자입니다.
필요한 모듈은 아래와 같습니다
// 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.writeFile(파일 이름, 내용, 'utf8', function(error){ ... }
위 코드를 이용해 txt파일을 생성하고 작성할 수 있습니다.
writeFile() 함수는, 파일에 내용을 쓰는 함수 입니다.
만약 파일이 없다면 생성해서 내용을 작성합니다.
(주의하실 점은, 있는 파일의 내용을 이어서 쓰진 않습니다)
fs.appendFile(파일 이름, 내용, function (err) { ... }
위 코드를 이용하면 파일이 있는 경우 그 내용을 이어쓰고,
없는 경우 새로 생성해서 작성합니다.
fs.unlink(파일 이름, function (err) { ... }
위 코드를 사용하면 해당 파일을 삭제시킬 수 있습니다.
fs.rename(원래이름, 바꿀이름, function (err) { ... }
위 코드를 사용하면 원본 파일의 이름을 바꿀 수 있습니다.
(두 옵션 모두 확장자까지 기술해야 하고,
이미 있는 파일명을 입력하면 오류가 발생합니다)
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");
}
});
다음장엔 파일 리스트를 불러와서 읽고 삭제하고 이름을 변경하는
기능을 구현해보겠습니다.
감사합니다.