Odds and Ends
4장 Node.js 강의 정리 - Node의 기본 기능 본문
[노드의 기본 기능]
1. 주소 문자열과 요청 파라미터
* url 모듈
- url모듈을 만들었으면 parse()나 format()이용해 처리
var url = require('url'); //url모듈에서 불러온 객체럴 url변수에 할당
var urlStr = 'https://search.naver.com/search.naver?where=nexearch&sm=top_sug.pre&fbm=1&acr=1&acq=%EB%B0%B0%EA%B3%A0%ED%8C%8C&qdt=0&ie=utf8&query=%EB%B0%B0%EA%B3%A0%ED%8C%8C'
var curUrl = url.parse(urlStr);
console.dir(curUrl);
console.log('query => ' + curUrl.query);
var curStr = url.format(curUrl);
console.log('url -> ' +curStr);
// 검색어만 추출
var querystring=require('querystring');//querystring모듈 불러와 변수에할당
var params = querystring.parse(curUrl.query);
console.log('검색어 : ' + params.query);
검색어는 query로 확인, query란?
: 웹 서버에 특정한 정보를 보여달라는 웹 클라이언트 요청
2. 이벤트 이해하기
: 한쪽 모듈에서 다른쪽 모듈로 데이터를 전달할 시, 즉 같은 프로그램 내에서 데이터 주고받을 때 이벤트 발생
process.on('exit',function(){ // exit이벤트를 받겠다. exit이벤트 실행시 실행됨
console.log('exit 이벤트 발생함');
});
setTimeout(function(){
console.log('2초 후에 실행되었음');
process.exit();
},2000);//2초후에 실행됨
console.log('2초 후에 실행될 것임.');
: 가장 처음 process.on()은 exit이벤트 실행시 발생되어 가장 마지막에 출력되고,
setTimeout()은 2초 후에 실행됨으로 이후 console.log()문이 실행된 후에 실행된다.
1. process 사용 ( process란? 이벤트를 처리하는데 주로 사용되는 전역객체 )
process.on('tick',function(count){
console.log('tick이벤트 발생함 : '+ count);
});
setTimeout(function(){
console.log('2초후에 실행되었음');
process.emit('tick','2'); //tick이벤트 발생시킴
},2000);
: tick이라는 이벤트 직접 생성.
2. process 사용하지 않고 실행 - 직접 이벤트 emit을 상속해서 만들어보자.
[계산기 예제]
메인파일 - ch04_test4.js
var Calc = require('./calc3'); //직접 만든 모듈 불러옴
var calc1 = new Calc(); // require으로 프로토타입 객체 반환 받아왔음으로 new연산자 사용하 새로운 객체 생성
calc1.emit('stop'); // stop이벤트 전달
console.log('Calc에 stop 이벤트 전달함');
* emit()이란?
: emit( ) : 이벤트를 발생시키는 함수. 아래 모듈파일의 on( ) 함수에서 'stop'라는 이벤트가 캐치되기 위해서는 emit('stop') 의 형태로 이벤트를 발생시켜야 한다.
모듈파일 - calc3.js
var EventEmitter=require('events').EventEmitter;
var util = require('util');
var Calc = function(){
this.on('stop', function(){
console.log('Calc에 stop 이벤트 전달됨');
});
};
util.inherits(Calc,EventEmitter);
Calc.prototype.add = function(a,b){
return a+b;
};
module.exports = Calc;
: util이라는 모듈 불러와서 상속 사용, 프로토타입 객체 반환
3. 파일 다루기
파일 읽기 예제 - readFileSync사용(파일을 다 읽을때까지 대기), ch04_test5.js
var fs = require('fs');
var data = fs.readFileSync('./package.json','utf8');
console.log(data);
fs 모듈로 파일을 읽을 때 두가지 방식이 있다. -동기,비동기
파일 읽기 예제
- readFile사용(파일을 다 읽을때까지 대기하지 않고 일단 다른 코드 실행, 다 읽으면 그 때 실행) , ch04_test6.js
var fs = require('fs');
fs.readFile('./pakage.json','utf8',function(err,data){
console.log(data);
});
파일 쓰기 예제 - ch04_test7.js
var fs = require('fs');
fs.writeFile('./output.txt','Hello.',function(err){
if(err){
console.log('에러 발생.');
console.dir(err);
return;
}
console.log('output.txt 파일에 데이터 쓰기 완료함');
});
*console 객체의 dir() 함수란?
: dir 함수는 객체의 속성을 계층구조로 출력한다.
버퍼 객체 사용 - ch04_test8.js
var fs = require('fs');
fs.open('./output.txt','w',function(err,fd){
if(err){
console.log('파일 오픈 시 에러 발생');
console.dir(err);
return;
}
var buf = new Buffer('안녕:\n');
fs.write(fd, buf, 0, buf.length, null, function(err, written, buffer){
if(err){
console.log('파일 쓰기 시 에러 발생');
console.dir(err);
return;
}
console.log('파일 쓰기 완료함');
fs.close(fd, function(){
console.log('파일 닫기 완료함');
});
})
});
* 콜백함수 연결하여 파일 읽기, 종료 알아보기
var fs = require('fs');
var infile = fs.createReadStream('./output.txt',{flags:'r'});
infile.on('data', function(data){ //콜백함수
console.log('읽어들인 데이터 : '+ data);
});
infile.on('end',function(){ //콜백함수
console.log('읽기 종료');
});
4. 로그파일 남기기
: 설명 주석 참조
ch04_test9.js
var output = '안녕:';
var buffer1 = new Buffer(10);
var len = buffer1.write(output, 'utf8');
console.log('버퍼에 쓰인 문자열의 길이 : ' +len);
console.log('첫번째 버퍼에 쓰인 문자열 : ' + buffer1.toString());
console.log('버퍼 객체인지 여부 : '+Buffer.isBuffer(buffer1));
var byteLen = Buffer.byteLength(buffer1);
console.log('byteLen : ' + byteLen);
var str1 = buffer1.toString('utf8', 0, 5);
console.log('str1 : ' + str1);
var buffer2 = Buffer.from('Hello','utf8');
console.log('두번째 버퍼의 길이 : ' + Buffer.byteLength(buffer2));
var str2 = buffer2.toString('utf8', 0, Buffer.byteLength(buffer2)); //버퍼의 길이값
console.log('str2 : ' + str2);
ch04_test15.js
// 세개의 외장모듈 사용
var winston = require('winston');
var winstonDaily = require('winston-daily-rotate-file');
var moment = require('moment');
function timeStampFormat(){
return moment().format('YYYY-MM-DD HH:mm:ss.SSS ZZ'); //이러한 포맷으로 시간 넘겨준다.
}
// logger라고 하는 객체 만듦 - 정보출력위함
var logger = new (winston.createLogger)({// "winston.Logger is not a constructor" 에러뜨는 이유는 상단에서 객체를 생성했기 때문, Logger->createLogger
transports: [
new (winstonDaily)({
name:'info-file',
filename:'./log/server',
dataPattern:'_yyyy-MM-dd.log',
colorize:false,
maxsize:50000000,
maxFiles:1000,
level:'info',
showLevel:true,
json:false,
tilestamp:timeStampFormat
}),
new (winston.transports.Console)({
name:'debug-console',
colorize:true,
level:'debug',
showLevel:true,
json:false,
tilestamp:timeStampFormat
})
]
});
logger.debug('디버깅메시지입니다.');
logger.error('에러 메시지입니다.');
'Node.js 강의 정리' 카테고리의 다른 글
5장 Node.js 강의 정리 - 웹 서버 만들기 (0) | 2021.07.10 |
---|---|
3장 Node.js 강의 정리 - Node.js의 자바스크립트 (0) | 2021.07.01 |
2장 Node.js 강의 정리 - 간단한 Node.js (0) | 2021.07.01 |
1장 Node.js 강의 정리 - Node.js 설치와 예제 (0) | 2021.06.29 |