본문 바로가기
nodejs

노드의 기본 기능 알아보기...

by jackypark 2022. 9. 12.

주소 문자열과 요청 파라미터 다루기

url모듈의 주요 메서드

메소드명 설명
parse( ) 주소 문자열을 파싱하여 URL 객체를 만들어 줍니다
format( ) URL 객체를 주소 문자열로 변환합니다
var url = require('url');

var urlStr ='<https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=nodejs>';

var curUrl = url.parse(urlStr);
console.dir(curUrl);

console.log('query -> ' +curUrl.query);

var curStr = url.format(curUrl);
console.log('url -> '+ curStr);

var qs = require('querystring'); // 내가 검색한 단어 찾기 query 찾기
var params = qs.parse(curUrl.query);

console.log('검색어 : ' +params.query);

이벤트 이해하기

이벤트란?

  • 비동기 방식으로 처리하기 위해 한쪽에서 다른 쪽으로 데이터 전달
  • EventEmitter 사용
  • 한 쪽에서 이벤트를 emit( )으로 보내고 다른 쪽에서 리스너를 등록하여 on( )으로 받음
메소드 명  설명
on(event, listener) 지정한 이벤트의 리스너를 추가합니다.
once(event, listener) 지정한 이벤트의 리스너를 추가하지만 한 번 시행한 후에는 자동으로 리스너가 제거 됨
removeListener(event, listener) 지정한 이벤트에 대한 리스너를 제거합니다.
process.on('exit',function(){
    console.log('exit 이벤트 발생함.')
});

setTimeout(function(){
    console.log('2초후 실행되었음');

    process.exit();
},2000);// 초후에 실행 됨

console.log('2초 후에 실행될 것임');

process.on('tick',function(count){
    console.log('tick 이벤트 발생함: '+count);
});

setTimeout(function(){
    console.log('2초후 실행되었음');

    process.emit('tick','2');
},2000);//2 초후에 실행 됨

객체를 모듈로 만들어 보기

//calc.js
//계산기 만들기 
//Cacl가 프로토타입 객체로 만들어져야함

var EventEmitter = require('events').EventEmitter//import eventemitter라는 듯
var util = require('util'); //자바에서 import 같은느낌

var Calc = function(){
    this.on('stop',function(){
        console.log('Calc에 stop이벤트 전달됨.');
    });

};

util.inherits(Calc, EventEmitter);// 상속 하는방법 뒤에가 부모 앞에가 자식

Calc.prototype.add= function(a,b){ //add 메소드 만들기
    return a+b;
}

module.exports=Calc; //모듈.export에 객체 할당
//실행 js
var Calc = require('./calc'); //calc import

var calc1 = new Calc(); //객체생성
calc1.emit('stop');

console.log('Calc에 stop 이벤트 전달함.');

파일 다루기

readFile(filename, [encoding], [callback]) 비동기식 IO로 파일을 읽어 들임
readFileSync(filename, [encoding]) 동기식 IO로 파일을 읽어 들임
writeFile(filename, data, encoding=’utf-8’, [callback]) 비동기식 IO로 파일을 씀
writeFileSync( filename, data, encoding=’utf-8’ ) 동기식 IO로 파일을 씀
var fs = require('fs'); //filesystem이라는 모듈 불러오기

var data1 = fs.readFileSync('./calc2.js','utf8'); //calc2파일 내용 불러오기

console.log(data1);

fs.readFile('./calc2.js','utf8',function(err,data){//callback 함수
    console.log(data);
});// 비동기 방식
//실행 결과가 동일하지만 실행 방식이 다르다 filesync파일을 읽을때 까지 대기
//다른건 기다리지 않고 그냥 넘어가고 파일을 읽었을때 함수가 실행

대부분 비동기식으로 처리함

var fs = require('fs');

fs.writeFile('./output.txt','Hello.',function(err){//output텍스트파일에 내용 쓰기
    if(err){// err객체가 나오면
        console.log('에러 발생.');
        console.dir(err);
        return;//에러가 발생하면 밑으로 내려가지 않고 끝내기 위해
    }
    console.log('output.txt 파일에 데이터 쓰기 완료함');
});

파일 열고 닫으면서 읽거나 쓰기

var fs = require('fs');

fs.open('./output.txt','w',function(err,fd){//오픈해줘서 callback함수를 호출
    if(err){//파일 오픈시 에러 발생하면
        console.dir(err);
        return;
    }
    var buf = new Buffer('안녕\\n');
    fs.write(fd,buf,0,buf.length,null,function(err,written,buffer){
        if(err){//파일 쓰기시시 에러 발생하면
            console.dir(err);
            return;
        }  
        console.log('파일 쓰기 완료함.')

        fs.close(fd,function(){
            console.log('파일 닫기 완료함');
        }); 
    });
});

버퍼 객체 사용해보기

var buffer2 = Buffer.from('Hello','utf8'); //buffer2라는 객체를 만든거임 
console.log('두번째 버퍼의 길이 : '+ Buffer.byteLength(buffer2));

var str2 = buffer2.toString('utf8',0,Buffer.byteLength(buffer2));
console.log('str2:' +str2);

스트림 단위로 파일 읽고 쓰기

파일을 읽거나 쓸 때는 데이터 단위가 아닌 스트림 단위로 처리할 수도 있다. 스트림은 데이터가 전달되는 통로와 같은 개념이다.

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);// 읽어드린 데이터 output2.txt에 쓰기
});

infile.on('end',function(){ //끝내기
    console.log('읽기 종료');
    outfile.end(function(){
        console.log('파일 쓰기 종료');
    });
});

댓글