fs
파일 읽기는 node.js에서 제공해주는 모듈인 fs를 이용하면 매우 쉽다
const fs = require('fs');
fs.readFile('path','option', callback(err,data));
의 형태로 사용할 수 있는데 간단하게 사용해보면
fs.readFile('hello.txt', 'utf8', ((err, data) => {
console.log(data);
}
로 hello.txt에 들어있는 텍스트 내용을 출력할 수 있다
이 데이터를 화면에 뿌리고 싶을 때는
const fs = require('fs');
const http = require('http');
http.createServer(((req, res) => {
res.writeHead(200);
fs.readFile('hello.txt', ((err, data) => {
res.end(data);
}));
})).listen(3000);
readFile의 콜백함수 안에서 응답을 종료해줘야된다
나는 처음에
fs.readFile('hello.txt', ((err, data) => {
res.write(data);
}));
res.end();
이렇게 짜고 왜 안되지? 똑같이 했는데? 라고 무식하게 머리 뜯고 있다가
console.log(data)는 제대로 나오는데 화면에 출력하는 것만 안되서 의아했는데
비동기적으로 작동한다는 걸 알고 무릎을 탁 쳤다
readFile의 콜백이 비동기적으로 방식하기 때문에 res.end()후에 데이터를 화면에 뿌리는데
이미 응답이 종료되고 나서 res에 접근하기 때문에 에러가 나고 있던 것
찾아보면서 알게된건데 노드에선 대부분의 비동기 메소드들을 동기방식과 함께 제공하고 있다고 한다
뒤에 Sync만 붙여주면되는데
const data = fs.readFileSync('hello.txt','utf8');
res.write(data);
res.end();
처럼 사용이 가능하다