|플래그|설명| |r|읽기에 사용하는 플래그, 파일이 없으면 예외 발생| |w|쓰기에 사용하는 플래그, 파일이 없으면 만들어지고 파일이 있으면 이전 내용을 모두 삭제| |w+|읽기와 쓰기에 모두 사용하는 플래그, 파일이 없으면 만들어지고 파일이 있으면 이전 내용을 모두 삭제| |a+|읽기와 추가에 모두 사용하는 플래그, 파일이 없으면 만들어지고 파일이 있으면 이전 내용에 새로운 내용추가|
버퍼 객체 사용하는 방법 알아보기
크기를 먼저 지정하면 나머지 공간이 그대로 버퍼에 남아있게 된다. 버퍼인지 아닌지 확인하는 메소드 isBuffer(), 하나의 버퍼 객체를 다른 버퍼 객체로 복사 메소드 copy(), 두 개의 버퍼를 하나로 붙여서 새로운 버퍼 객체 만드는 메소드 concat() 사용
스트림 단위로 파일 읽고 쓰기
스트림은 데이터가 전달되는 통로와 같은 개념이다.
메소드
설명
createReadStream(path[,option])
파일을 읽기 위한 스트림 객체를 만든다
createWriteStream(path[,option])
파일을 쓰기 위한 스트림 객체를 만든다
옵션으로는 flags,encoding,autoClose속성이 들어 있는 자바스크립트 객체를 전달할 수 있다.
pipe()메소드는 두 개의 스트림을 붙여주는 역할을 한다.
스트림을 서로 연결하는 방법은 웹 서버를 만들고 사용자의 요청을 처리할 대 유용하다.
http 모듈로 요청받은 파일 내용을 읽고 응답하기
파일에서 만든 스트림 객체와 웹 서버의 스트림 객체를 pipe()메소드로 연결할 수 있다. 파일에서 데이터를 읽어 오기 위해 만든 것도 스트림 객체, 데이터를 쓰기 위해 웹서버 클라이언트 쪽에 만든 것도 스트림객체이기 때문에 연결이 가능하다.
fs모듈로 새 디렉터리 만들고 삭제하기
04-4 로그 파일 남기기
프로그램의 크기가 커질수록 로그의 양도 많아지고 로그를 보관했다가 나중에 확인해야하는 경우도 생긴다. 따라서 어떻게 로그를 보관하고 남길지가 중요해진다. winston모듈로 로그를 남기는 법을 알아볼 것이다.
Logger는 로그를 출력하는 객체를 말한다. 로거는 transports라는 속성 값으로 여러 개의 설정 정보를 전달할 수 있다.
process.on('exit',function(){
console.log('exit 이벤트 발생');
});
setTimeout(function(){
console.log('2초 후에 시스템 종료 시도');
process.exit();
},2000);
// calc.js
var util = require('util');
// events모듈을 불러들인 후 EventEmitter객체참조
var EventEmitter = require('events').EventEmitter;
var Calc = function(){
//프로토타입 객체로 this를 사용해 자기자신을 가리킴.
// 그 객체안에 정의된 속성에 접근
var self = this;
this.on('stop',function(){
console.log('Calc에 stop 이벤트 전달');
});
};
// 상속은 util모듈의 inherits()메소드를 이용해서 정의
util.inherits(Calc,EventEmitter);
// new연산자를 이용해 Calc를 만들었을때 add()함수 사용할 수 있음.
Calc.prototype.add = function(a,b){
return a+b;
}
// Calc객체 참조할 수 있도록 지
module.exports = Calc;
module.exports.title = 'calculator';
//test.js
var Calc = require('./calc');
var cal = new Calc();
// 인스턴스 객체의 emit() 메소드 호출해 stop이벤트 전
cal.emit('stop');
console.log(Calc.title+'에 stop 이벤트 전달');
// 파일 시스템에 접근하기 위한 fs모듈
var fs=require('fs');
//파일을 동기식 IO로 읽어 들인다.
var data = fs.readFileSync('./package.json','utf8');
//읽어들인 데이터 출력
console.log(data);
// 파일 시스템에 접근하기 위한 fs모듈
var fs=require('fs');
//파일을 비동기식 IO로 읽어 들인다.
//이때 function은 파일을 읽어들이는 작업이 끝났을때 호출한다.
var data = fs.readFile('./package.json','utf8',function(err,data){
//읽어들인 데이터 출력
console.log(data);
});
console.log('프로젝트 폴더 안의 package.json 파일을 읽도록 요청');
// 파일 시스템에 접근하기 위한 fs모듈
var fs=require('fs');
// 파일 열기
fs.open('./output.txt','w',function(err,fd){
//데이터는 필요한 만큼 Buffer객체 안에 슨다.
var buf = new Buffer('안녕\n');
//fd객체로 파일을 구별한다.
fs.write(fd,buf,0,buf.length,null,function(err,written,buffer){
if(err) throw err;
console.log(err,written,buffer);
//파일닫기
fs.close(fd,function(){
console.log('파일 열고 데이터 쓰고 파일 닫기');
})
})
})
var fs = require('fs');
var infile = fs.createReadStream('./output.txt',{flags:'r'});
var outfile = fs.createWriteStream('./output2.txt',{flags:'w'});
infile.on('data',function(data){
console.log('읽어 들인 데이터', data);
outfile.write(data);
});
infile.on('end',function(){
console.log('종료');
outfile.end(function(){
console.log('파일쓰기 종료');
});
});
var fs = require('fs');
var inname = './output.txt';
var outname = './output2.txt';
fs.exists(outname,function(exists){
//파일을 만들기 전에 파일이 이미 존재하면 삭제한다.
if(exists){
fs.unlink(outname, function(err){
if(err) throw err;
console.log('기존 파일 ['+outname+']삭제함');
});
}
var infile = fs.createReadStream(inname,{flags: 'r'});
var outfile = fs.createWriteStream(outname,{flags: 'w'});
//두개의 스트림을 pipe()메소드로 연결해 복사
infile.pipe(outfile);
console.log('파일 복사'+inname +outname);
});
var fs = require('fs');
var http = require('http');
var server = http.createServer(function(req,res){
//파일을 읽어 응답 스트림과 pipe로 연결
var instream = fs.createReadStream('./output.txt');
instream.pipe(res);
});
server.listen(7001,'127.0.0.1');