adSense 900*70


Node.js NodeJs

Node.js

기본 사항


  1. __dirname vs process.cwd()



    • __dirname는 REPL(Read–eval–print loop)에서는 사용 불가하다. 그렇지만 .js파일 안에서는 가능하다. 그리고 실행 중인 혹은 참조된 파일의 절대 경로를 나타낸다.
    • process.cwd() 함수이며, REPL에서 해당 스크립트를 실행하는 프로세스의 절대 경로이다.

      • a.js의 위치가 nodejs 밑에 있고 전체 경로가 dev/test/nodejs일때, 내용이 아래와 같다면
        path = require('path')
        console.log(__dirname);
        console.log(process.cwd())
        dev/test/를 현재 위치로 하여 a.js를 실행한 결과는 아래와 같다.
        /dev/test/nodejs
        /dev/test/


  2. http server 예제



    • 보통 node.js 책에 http server에 대한 기본 예제는 아래와 같을 것이다. 아래의 코드를 실행 후 해당 nodejs process를 종료하면 해당 http server도 종료된다. 당황하지 말자.
      var http = require('http')
      http.createServer(function(req, res){
      res.writeHeader(200, {'Content-Type':'text/plain'});
      res.end('Welcome Node.js world');
      }).listen(9900, '127.0.0.1');
      ;

  3. Callback Hell 탈출 방법



    • Callback Hell detail: http://callbackhell.com
    • 해결책: event emitter 혹은 promise를 사용하여 해결 가능



      • promise를 잘 설명한 블로그 제목이 도발적이다. 내가 바본가? ㅎ;;
      • promise npm
      • 파일 읽기 promise 사용 비교
        promise 사용 안한 경우


        var fs = require('fs');
        var path = require('path');
        var callback = function(err, data){
        if(err){
        console.log('*********** error ***********');
        console.log(err);
        //throw err;
        }else{
        console.log('*********** success result ***********');
        console.log('contents\n'+ data);
        }
        }
        fs.readFile(path.join(__dirname, 'not_exist.txt'), {encoding: 'utf-8'}, callback);
        fs.readFile(path.join(__dirname, 'test.txt'), {encoding: 'utf-8'}, callback);

        promise 사용


        var fs = require('fs');
        var Promise = require('promise');
        // promise
        var read = Promise.denodeify(fs.readFile);
        var p = read('test.txt','utf-8')
        .then(function(content){
        console.log(content)
        });

        p = read('not_exist.txt','utf-8')
        .then(function(content){
        console.log('*********** success result ***********');
        console.log(content)
        }).catch(function(err){
        console.log('*********** error ***********');
        console.log(err);
        });

        흠~ 코드 양은 별반 다르지 않내 ㅋ;;


      • emmiter 사용은 다음에



덧글

댓글 입력 영역


side adsense

adSense 900*70