무작정 개발.Vlog

[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 이벤트를 호출
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 = "계산기";

test3.js 실행 결과
test3.js 실행 결과

 


파일 읽기, 쓰기, 삭제

 

(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폴더 삭제..");
});
반응형

블로그의 정보

무작정 개발

무작정 개발

활동하기