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에 내용을 입력하고 확인을 누르니 성공적으로 파일이 작성된 것을 볼 수 있다.