Rubberduck-Debugging

nodeJS 비동기식, 파일 다루기 본문

개발자/20181127 교육과정

nodeJS 비동기식, 파일 다루기

P缶 2019. 1. 7. 09:25

* node js는 비동기라 callback을 사용한다.

fs 모듈 사용시


* 비동기식 : callback 사용
논-블럭 방식
fs.readFile('textfile.txt', 'utf8',function(error, data) {}); 

fs.readFile('none_exist.txt', 'utf-8', function(err, data) {
        if ( err ) { 
console.error('Readfile error ', err); 
       } else { 
// 정상 처리 
});


* 동기식 : readFileSync
블럭방식 : 성능상 주의
var data = fs.readFileSync('textfile.txt', 'utf8'); 

try { 
      var data = fs.readFileSync('none_exist.txt', 'utf-8');}
catch ( exception ) { 
 console.error('Readfile Error : ', exception); 
}



-----------------------------------------------------------------------------------------------------------------




파일 다루기 
var fs = require('fs');

fs.writeFile('textData.txt', 'Hello World', function(err) {
   if ( err ) {
      console.error('Error : ', err);
      return;
   }
   console.log('Write');
});

*FileRead.js
var fs = require('fs');

var file = 'read.txt';

fs.access(file, fs.F_OK, function(err) {    //access = 접근
   if ( err ) {
      console.log('파일 없음');
      process.exit(1);      
      
   }
   else {
      console.log('파일 존재');
      
      fs.stat(file, function(err, stats) {    //첫번째 파라미터 : error, 두번째부터 진짜
         if ( err ) {
            console.error('File Stats Error', err);
            return;
         }
   
         console.log('Create : ', stats['birthtime']);
         console.log('size : ', stats['size']);
         console.log('isFile : ', stats.isFile());
         console.log('isDirectory : ', stats.isDirectory());
         console.log('isBlockDevice : ', stats.isBlockDevice());
         
         if ( stats.isFile() ) {
            fs.readFile(file, function(err, data) {
               if ( err ) {
                  console.error('File Read Error', err);
                  return;
               }
               // encoding을 작성하지 않으면 Buffer로
               var str = data.toString('utf-8');
               console.log('File Contents : ', str);
            });               
         }      
      });         
   }   
}); 

1. require('fs')로 읽어온다.

2. fs.access로 접근한다.
3. 기본적인 구조가 먼저 error날 때를 상정, if 처리
4. process.exit( 숫자 ) -> 종료시킨다



-----------------------------------------------------------------------------------------------------------------



[스트림 : 데이터 전송 흐름]
-콘솔 입력/출력
-파일 읽기/쓰기
-서버/클라이언트 -데이터 전송

스트림종류
읽기 스트림 : Readable Stream
쓰기 스트림 : Writeable Stream

Readable Stream 
- 읽기 스트림 : Readable 
- 모드 : flowing, paused 
- flowing mode 
--데이터를 자동으로 읽는 모드 
--전달되는 데이터를 다루지 않으면 데이터 유실 
- paused mode 
--데이터가 도착하면 대기 
--read() 함수로 데이터 읽기


Readable Stream 
-readable : 읽기 가능한 상태 
-data : 읽을 수 있는 데이터 도착 
-end : 더 이상 읽을 데이터가 없는 상태 
-close : 스트림이 닫힌 상태 
-error : 에러

var is = fs.createReadStream(file);
is.on('readable', function() {
 console.log('== READABLE EVENT');
});
is.on('data', function(chunk) {
 console.log('== DATA EVENT');
 console.log(chunk.toString());
});
// end 이벤트
is.on('end', function() {
 console.log('== END EVENT');
});


var is = fs.createReadStream(file);
// 'data' 이벤트가 없으면 paused mode
is.on('readable', function() {
 console.log('== READABLE EVENT');

 // 10바이트씩 읽기
 while( chunk = is.read(10) ) {
 console.log('chunk : ', chunk.toString());
 }
});

-----------------------------------------------------------------------------------------------------------------

Writable Stream 
-Writable Stream : 데이터 출력 
-http 클라이언트의 요청 
-http서버의 응답 
-파일 쓰기 스트림 
-tcp 소켓 

이벤트  
-drain : 출력 스트림에 남은 데이터를 모두 보낸 이벤트 
-error : 에러 
-finish : 모든 데이터를 쓴 이벤트 
-pipe : 읽기 스트림과 연결(pipe)된 이벤트 
-unpipe : 연결(pipe) 해제 이벤트


var fs = require('fs');
var os = fs.createWriteStream('output.txt');
os.on('finish', function() {
 console.log('== FINISH EVENT');
});
os.write('1234\n');
os.write('5678\n');
os.end();



-----------------------------------------------------------------------------------------------------------------


URL
-URL 모듈 
var url = require(‘url'); 

-URL 모듈 
url.parse(urlStr[, parseQueryString][, slashesDenoteHost]) 
-urlStr : URL 문자열 
-parseQueryString : 쿼리 문자열 파싱, 기본값 false 

var url = require('url');

var parsed = url.parse(urlStr, true);
console.log(parsed);

console.log('protocol : ', parsed.protocol);
console.log('host : ', parsed.host);
console.log('query : ', parsed.query);

* 네트워크 url 정보를 뽑아내는 메소드





'개발자 > 20181127 교육과정' 카테고리의 다른 글

nodeJs npm module  (0) 2019.01.07
nodeJS npm  (0) 2019.01.07
node js 전역객체 실습  (0) 2019.01.04
node js 강의  (0) 2019.01.04
jquery radio,checkbox value값 가져오기 $("input:checkbox  (0) 2019.01.02