[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
process 객체
- 내부적으로 EventEmitter를 상속받고 있음.
- process.on, process.emit => 이런 식으로 사용 가능
- node.js의 기본 내장 객체로써 어디에서든 사용 가능
이벤트(Event) 사용 예제
(1) - 내장 이벤트 사용 - exit
- exit는 내장 이벤트라 이름 변경 x
- process가 종료하면 자동으로 exit 이벤트를 호출
process.on("exit",function() {
console.log("exit 이벤트 발생...");
});
setTimeout(function() {
console.log("3초 후에 시스템 종료")
//process는 내부적으로 EventEmitter를 상속되어 있음
process.exit(); //exit 호출 / exit는 내장 객체라서 이 부분을 주석처리해도
// 자동으로 호출한다.
},3000);
(2) - 사용자 정의 이벤트
- emit() : 프로그램 안에서 이벤트 발생시킬 때 쓰는 메서드
//사용자가 만든 함수
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
//외부 파일을 불러올 수 있음
var Calc = require("./calc"); //calc.js를 불러온다.
var calc = new Calc(); // 객체 생성
// calc.js의 Calc 객체의 모든 것을 쓸 수 있음
//emit으로 호출
calc.emit("stop");
// "stop" 이라는 이벤트 전달(호출)
console.log(Calc.title);
calc.js
// 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 사용 : 동기식으로 파일 읽기
//FS사용하기
var fs = require("fs");
//파일을 동기식으로 읽음
var data = fs.readFileSync("../data.json","UTF-8"); //UTF-8 소문자로써도되고, -를 빼도 된다.
console.log(data);
// 파일을 연결한 상태에서 데이터를 읽은 것
// 결과가 올때까지 다른 작업 못함
(2) - 비동기식으로 파일 읽기
//FS사용하기
var fs = require("fs");
//파일을 비동기식으로 읽음
//다 읽으면 function 수행 / (읽다가 에러나면 err, 성공적이면 data에 담는다.)
fs.readFile("../data.json", "UTF-8", function(err, data) {
console.log(data);
});
console.log("동기방식으로 읽음..");
(3) - 파일에 데이터 쓰기
//파일에 데이터 쓰기
var fs = require("fs");
fs.writeFile("./output.txt", "오늘은 금요일~~",function(err){
if(err) {
console.log("에러발생: " + err);
}
console.log("쓰기 완료!!");
});// sync면 동기방식
console.log("aaa");
(4) - 파일 복사
//파일 복사
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 (파이트) 사용하기
//파일 복사
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) - 폴더 생성 및 삭제
//폴더 생성, 삭제
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폴더 삭제..");
});
반응형
'Back-End > node.js' 카테고리의 다른 글
[node.js] 웹 서버 구축, express 미들웨어 (0) | 2022.04.04 |
---|---|
[node.js] winston 모듈 (0) | 2022.04.03 |
[node.js] 배열, 콜백 함수, prototype 객체 생성 (0) | 2022.04.03 |
[node.js] 내장 모듈(os, path), 객체와 함수 (0) | 2022.04.03 |
[node.js] 전역 객체(console, process, exports) (0) | 2022.04.01 |
블로그의 정보
무작정 개발
무작정 개발