NodeJS

파일 저장하기

개발자doc 2024. 6. 6. 21:50
목차
1. 파일 쓰기 메서드
2. 파일 읽기 메서드
3. 데이터 전송
4. 전송된 데이터를 파일로 저장

1. 파일 쓰기 메서드

1 ) writeFile

  • 비동기적으로 파일을 작성하는 메소드
fs.writeFile(파일경로/파일명,데이터,(err)=>{
    if(err){
        // 파일 쓰기가 제대로 이루어지지 않았을 대 처리
    }else{
        // 파일 쓰기가 정상적으로 이루어졌을 때 처리
    }
})
    비동기방식이기 때문에 파일을 쓰기는 작업이 완료가 되지 않아도 다음 작업이 진행이 되기 때문에 반드시 파일을 쓴 이후 이루어져야 할 작업은 콜백함수 안에 작성해야한다.  

2) writeFileSunc

  • 동기적으로 파일을 작성하는 메소드
fs.writeFileSync(파일경로/파일명,데이터);

 

2. 파일 읽기 메서드

1 ) readFile

  • 비동기적으로 파일을 읽는 메소드
fs.readFile(파일경로/파일명,(err)=>{
    if(err){
        // 파일 읽기가 제대로 이루어지지 않았을 대 처리
    }else{
        // 파일 읽기가 정상적으로 이루어졌을 때 처리
    }
})

비동기 방식이기 때문에 파일읽기 작업이 완료되지 안아도 다음 작업이 진행되기 때문에 파일을 읽은 후 이루어져야할 작업은 콜백함수 안에서 이루어져야 한다.

 

2) readFileSync

  • 동기적으로 파일을 읽는 메소드
fs.readFileSync(파일경로/파일명);
3. 데이터 전송

일단 데이터를 전송할 요소가 있어야 한다. 전송을 위한 태그는 form인데 여러 속성을 지정하여 서버에 요청 경로 및 타입을 지정할 수 있다.

지정할 속성

1 ) method

2 ) action

3 ) enctype

method 서버에 요청할 데이터 처리형태(http 메서드) get,post,put,petch,delete
action 서버에 요청할 경로 /
enctype 서버에 데이터를 전송할 때 인코딩 방식 application/x-www-form-urlencoded(기본 인코딩타입)
multipart/form-data(파일 전송)
text/plain(공백은 '+'로 변환, 나머지는 인코딩하지 않음)

accept-charset
서버에 보내는 문자열 데이터 인코딩 형식 EUC-KR, UTF-8 등
<form method ="post" action="/write">
    <input type="text" name="text">
    <button>확인</button>
</form>

form 요소 하위에 input 등의 입력 요소들은 button을 클릭했을 때 name을 key로 입력받은 값이 value로 되어 서버로 전송된다.

4. 전송된 데이터를 파일로 저장

html에서 입력받은 값은 요청된 경로에 맞는 라우팅 처리가 되어있을 때 요청의 body에 전송된다. 따라서  key값을 통해 해당 데이터를 가져올 수 있다. 해당 데이터를 파일로 저장하기 위해서는 fs모듈이 필요하고 파일작성에 대한 메서드를 사용하여 쓰기작업을 해주면 된다.

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

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


// 사이트의 첫 화면으로할 파일 내용을 응답
app.get("/", (req, res) => {
    const file = fs.readFileSync(path.join(__dirname, "index.html"));
    res.setHeader("Content-Type", "text/html;charset=UFT-8");
    res.send(file);
    res.end();
})

app.post("/write", (req, res) => {
    const textContent = req.body.text;
    const fileName = "text.txt";
    fs.writeFileSync(path.join(__dirname, fileName), textContent);
    res.redirect('/');
})


app.listen(3000, () => {
    console.log("서버 실행중")
})

위의 예제에서는 요청의 body에서 데이터를 추출하여 동기적으로 파일을 작성하였고 작업이 끝나면 첫 화면을 보이도록 하였다. 

input에 내용을 입력하고 확인을 누르니 성공적으로 파일이 작성된 것을 볼 수 있다.