'프로그래밍/Node.js'에 해당되는 글 2건

  1. 2014.02.02 Node 샘플 프로그램
  2. 2014.02.02 Node 설치하기
반응형

1. Hello World 샘플 프로그램

vi ~/Node/chapter01/helloworld.js

var http = require('http');

http.createServer(function (req, res) {

res.writeHead(200, {'content-type': 'text/plain'});

res.write('Hello World!\n');

res.end();

}).listen(8124);


console.log('Server running on 8124');

$ node helloworld.js


2. 비동기 함수로 만들기 (process.nextTick 사용)

var asynchFunction = function(data, callback) {

    process.nextTick(function() {

        callback(data);

    }); 

}


function log(data) {

    console.log(data);

}


asynchFunction("123", log);


3. 비동기 함수로 만들기 (setTimeout 사용)

function log(data) {

    console.log(data);

}


setTimeout(log, 0, "456");


4. Server Socket

var net = require('net');


var server = net.createServer(function(conn) {

    console.log('connected');


    conn.on('data', function(data) {

        console.log(data + ' from ' + conn.remoteAddress + ' ' +

            conn.remotePort);

        conn.write('Repeating: ' + data);

    }); 


    conn.on('close', function() {

        console.log('client closed connection');

    }); 

}).listen(8124);


console.log('listening on port 8124');


5. Client Socket

var net = require('net');


var client = new net.Socket();

client.setEncoding('utf8');


client.connect('8124', 'localhost', function() {

    console.log('connected to server');

    client.write('Who needs a browser to communicate?');

});


process.stdin.resume();

process.stdin.on('data', function(data) {

    client.write(data);

});


client.on('data', function(data) {

    console.log(data);

});


client.on('close', function() {

    console.log('connection is closed');

});


6. dns 찾기

var dns = require('dns');

var querystring = require('querystring');


dns.lookup('burningbird.net', function(err, ip) {

    if (err) throw err;

    console.log(ip);

});


dns.reverse('173.255.206.103', function(err, domains) {

    domains.forEach(function(domain) {

        console.log(domain);

    }); 

});


var url = require('url');

var urlObj = url.parse('http://examples.burningbird.net:8124/?file=main');

console.log(urlObj);


var qs = urlObj.query;

console.log(qs);


var urlString = url.format(urlObj);

console.log(urlString);


var vals = querystring.parse('file=main&file=secondary&type=html');

console.log(vals);


var qryString = querystring.stringify(vals);

console.log(qryString);


7. 객체 상속

var util = require('util');


function first() {

    var self = this;

    this.name = 'first';

    this.test = function() {

        console.log(self.name);

    };  

}


first.prototype.output = function() {

    console.log(this.name);

}


function second() {

    second.super_.call(this);

    this.name = 'second';

}


util.inherits(second, first);


var two = new second();


function third(func) {

    this.name = 'third';

    this.callMethod = func;

}


var three = new third(two.test);


two.output();

two.test();

three.callMethod();     // this 는 three 객체를 참조하지만, var self 변수는 two 객체의 값임


8. EventEmitter 를 활용한 사용자 정의 Event 만들기

var events = require('events');

var em = new events.EventEmitter();

var counter = 0;


setInterval(function() {

em.emit('timed', counter++);

}, 3000);


em.on('timed', function(data) {

console.log('timed ' + data);

});


9. 일반 객체에 사용자 정의 Event 만들기

util.inherits(someobj, EventEmitter);

someobj.prototype.somemethod = function() { this.emit('eventname'); };

someobjinstance.on('eventname', function() { });


var util = require('util');

var eventEmitter = require('events').EventEmitter;

var fs = require('fs');


function inputChecker(name, file) {

    this.name = name;

    this.writeStream = fs.createWriteStream('./' + file + '.txt',

        {'flags': 'a',

         'encoding': 'utf8',

         'mode': 0666});

};


util.inherits(inputChecker, eventEmitter);


inputChecker.prototype.check = function check(input) {

    var command = input.toString().trim().substr(0,3);

    if (command == 'wr:') {

        this.emit('write', input.substr(3,input.length));

    } else if (command == 'en:') {

        this.emit('end');

    } else {

        this.emit('echo', input);

    }   

};


var ic = new inputChecker('Shelley', 'output');


ic.on('write', function(data) {

    this.writeStream.write(data, 'utf8');

});


ic.on('echo', function(data) {

    console.log(this.name + ' wrote ' + data);

});


ic.on('end', function() {

    process.exit();

});


process.stdin.resume();

process.stdin.setEncoding('utf8');

process.stdin.on('data', function(input) {

    ic.check(input);

});






반응형
Posted by seungkyua@gmail.com
,
반응형

[ Ubuntu 12.04 LTS 에서 관련 라이브러리 설치 ]

$ sudo apt-get update

$ sudo apt-get upgrade

$ sudo apt-get install build-essential openssl libssl-dev pkg-config


패키지로 설치되어 있는 Nodejs 먼저 제거하기

$ sudo apt-get purge nodejs

$ sudo apt-get autoremove



시스템 전역으로 설치하기 ]

1. source tarball 을 다운받아 설치한다.

http://nodejs.org/dist/ 에서 최신 버전인 node-v0.10.26.tar.gz 을 다운받는다.

$ mkdir Node

$ cd Node

$ wget http://nodejs.org/dist/v0.10.26/node-v0.10.26.tar.gz

$ tar -zxf node-v0.10.26.tar.gz

$ cd node-v0.10.26.tar.gz


$ ./configure            # 다른 디렉토리에 설치하고 싶으면 ./configure --prefix=경로

$ make

$ sudo make install


삭제하고 싶으면

$ sudo make uninstall



2. binary tarball 을 다운받아 설치한다.

http://nodejs.org/dist/latest/ 에서 최신 버전인 node-v0.10.26-linux-x64.tar.gz 을 다운받는다.

/usr/local 아래의 bin, include, lib 등의 디렉토리에 node 관련 파일들을 복사한다.

$ mkdir Node

$ cd Node

$ wget http://nodejs.org/dist/latest/node-v0.10.26-linux-x64.tar.gz

$ tar -zxf node-v0.10.26-linux-x64.tar.gz

$ cd /usr/local

$ sudo tar --strip-components 1 -xzf ~/Node/node-v0.10.26-linux-x64.tar.gz



로컬 설치하기 ]

nvm (Node Version Manager) 를 이용하여 설치한다.


/home/stack/.nvm/v0.10.26 에 설치됨

/home/stack/.profile 파일 맨 마지막에 nvm.sh 명령을 사용할 수 있게 추가됨

$ wget -qO- https://raw.github.com/creationix/nvm/master/install.sh | sh

$ . /home/stack/.profile

$ nvm install v0.10.26                 # Node v0.10.26 버전을 설치

$ nvm run v0.10.26                    # Node v0.10.26 버전을 사용

$ nvm ls                                  # Node 설치버전 리스트 조회 및 현재 사용하는 버전 조회



[ Mac 에 brew 로 설치하기 ]

# xcode 설치

# homebrew 설치

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"


$ brew install node --without-npm

$ vi .bash_profile

export PATH=/usr/local/Cellar/node/5.6.0/bin:$PATH


# npm 설치

$ curl -L https://www.npmjs.com/install.sh | sh



[ npm으로 관련 모듈 설치하기 ]

- 전역 영역에 설치하기 (-g 옵션 사용)

$ npm -g install <모듈명>


- 특정 버전을 설치하기 (0.1 버전)

$ npm -g install <모듈명>@0.1


- 전역 영역에 설치된 모듈 삭제하기

$ npm -g uninstall <모듈명>


- 전체 모듈 업데이트 하기

$ npm update


- 단일 모듈만 업데이트하기

$ npm update <모듈명>


- 최신 버전이 아닌 패키지가 있는지 확인만 하고 싶을 경우

$ npm outdated


- 설치된 모듈 종속 관계 보기

$ npm ls ll





반응형
Posted by seungkyua@gmail.com
,