[node.js] 이벤트, 파일 생성 및 삭제
by 무작정 개발반응형
2022.04.01(69일 차)
이벤트 (Event)
node.js는 이벤트 기반 비동기 방식으로 작동한다.
이벤트를 호출하고 여러 처리를 하기 위해서는 EventEmitter 객체를 상속받아 구현해야 한다.
node.js가 제공하는 이벤트 처리 클래스 : EventEmitter, events
EventEmitter
- EventEmitter을 이용해 직접 이벤트를 만들고, 처리 가능하다.
- EventEmitter를 상속받은 객체를 만들어 EventEmitter의 메서드를 사용한다.
메서드 | 설명 |
on('이벤트 이름', '리스너 함수') | 지정한 event에 대한 listener를 추가 |
emit('이벤트 이름', arg) | 이벤트에 등록된 리스너 함수를 등록된 순서에 따라 호출 - 이벤트가 존재하면 true, 그 외에는 false 반환 |
위 말고 더 많은 EventEmitter 메서드가 존재한다.
[참고]
https://brunch.co.kr/@hee072794/33
Node.js - Event
Node.js 배우기 | Event(이후 '이벤트'로 통칭) Node.js(이후 '노드'로 통칭)는 이벤트 기반 비동기 방식으로 작동한다. 그러므로 노드를 잘 다루기 위해서는 이벤트에 대해 이해하여야 한다. 노드에서
brunch.co.kr
process 객체
- 내부적으로 EventEmitter를 상속받고 있음.
- process.on, process.emit => 이런 식으로 사용 가능
- node.js의 기본 내장 객체로써 어디에서든 사용 가능
이벤트(Event) 사용 예제
(1) - 내장 이벤트 사용 - exit
- exit는 내장 이벤트라 이름 변경 x
- process가 종료하면 자동으로 exit 이벤트를 호출
javascriptprocess.on("exit",function() { console.log("exit 이벤트 발생..."); }); setTimeout(function() { console.log("3초 후에 시스템 종료") //process는 내부적으로 EventEmitter를 상속되어 있음 process.exit(); //exit 호출 / exit는 내장 객체라서 이 부분을 주석처리해도 // 자동으로 호출한다. },3000);

(2) - 사용자 정의 이벤트
- emit() : 프로그램 안에서 이벤트 발생시킬 때 쓰는 메서드
javascript//사용자가 만든 함수 process.on("tick", function(count) { //함수는 작업이 있어야 함 console.log("tick 이벤트 발생 : " + count); }); setTimeout(function() { console.log("2초 후에 tick이벤트 전달 시도"); process.emit("tick","5"); //tick 호출 /내가만든 메서드를 호출하기전까지 실행안됌 //사용자 정의 이벤트는 emit를 사용 },2000);

test 3.js
javascript//외부 파일을 불러올 수 있음 var Calc = require("./calc"); //calc.js를 불러온다. var calc = new Calc(); // 객체 생성 // calc.js의 Calc 객체의 모든 것을 쓸 수 있음 //emit으로 호출 calc.emit("stop"); // "stop" 이라는 이벤트 전달(호출) console.log(Calc.title);
calc.js
javascript// js도 인터프리터 언어라도 위부터 아래 순으로 실행 된다. // util.inherits : 상속을 가능하게하는 모듈 //상속을 가능하게하는 모듈 var util = require("util"); //extends var eventEmitter = require("events").EventEmitter;//events라는 모듈 안에 EventEmitter가 있다. // 내장 모듈 events가 EventEmitter를 상속 받음 var Calc = function() { //test3.js에서 보낸 이벤트를 받는 부분 this.on("stop",function() { console.log("Calc에 stop event 전달됨."); }); }; //public class Calc extends Emitter {} util.inherits(Calc,eventEmitter); //Calc가 eventEmitter를 상속받은것/Calc가 eventEmitter를 상속받아야만 위에 함수 안에 on을 실행할 수 있다. module.exports = Calc; //exports는 내보내기 => 다른곳에서 쓸 수 있게 module.exports.title = "계산기";

파일 읽기, 쓰기, 삭제
(1) - FS 사용 : 동기식으로 파일 읽기
javascript//FS사용하기 var fs = require("fs"); //파일을 동기식으로 읽음 var data = fs.readFileSync("../data.json","UTF-8"); //UTF-8 소문자로써도되고, -를 빼도 된다. console.log(data); // 파일을 연결한 상태에서 데이터를 읽은 것 // 결과가 올때까지 다른 작업 못함
(2) - 비동기식으로 파일 읽기
javascript//FS사용하기 var fs = require("fs"); //파일을 비동기식으로 읽음 //다 읽으면 function 수행 / (읽다가 에러나면 err, 성공적이면 data에 담는다.) fs.readFile("../data.json", "UTF-8", function(err, data) { console.log(data); }); console.log("동기방식으로 읽음..");
(3) - 파일에 데이터 쓰기
javascript//파일에 데이터 쓰기 var fs = require("fs"); fs.writeFile("./output.txt", "오늘은 금요일~~",function(err){ if(err) { console.log("에러발생: " + err); } console.log("쓰기 완료!!"); });// sync면 동기방식 console.log("aaa");
(4) - 파일 복사
javascript//파일 복사 var fs = require("fs"); //r,w,w+(r+w),a+(r+w 누적) var inFile = fs.createReadStream("./output.txt",{flags: "r"}); var outFile = fs.createWriteStream("./output2.txt",{flags: "w"}); //a+ 는 누적 //data는 예약어 / 변경x inFile.on("data",function(str) {//on이 나오면 이벤트 console.log("output.txt 읽음.."); outFile.write(str); }); //다 읽었으면 end가 실행된다. end랑 data는 예약어(내장되어있다) 변경x inFile.on("end", function() { console.log("파일 읽기 종료.."); outFile.end(function() { console.log("output2.txt 쓰기 완료..."); }) });
(5) - pipe (파이트) 사용하기
javascript//파일 복사 var fs = require("fs"); //r,w,w+(r+w),a+(r+w 누적) var inFile = fs.createReadStream("./output.txt",{flags: "r"}); var outFile = fs.createWriteStream("./output2.txt",{flags: "w"}); //a+ 는 누적 //data는 예약어 / 변경x inFile.on("data",function(str) {//on이 나오면 이벤트 console.log("output.txt 읽음.."); outFile.write(str); }); //다 읽었으면 end가 실행된다. end랑 data는 예약어(내장되어있다) 변경x inFile.on("end", function() { console.log("파일 읽기 종료.."); outFile.end(function() { console.log("output2.txt 쓰기 완료..."); }) });
(6) - 폴더 생성 및 삭제
javascript//폴더 생성, 삭제 var fs = require("fs"); fs.mkdir("./doc",function(err) { if(err) throw err; console.log("doc폴더 생성.."); }); //폴더 삭제 fs.rmdir("./doc",function(err) { if(err) throw err; console.log("doc폴더 삭제.."); });
블로그의 정보
무작정 개발
무작정 개발