2. 4.1 npm소개
npm : 노드를 위한 패키지 매니저, 확장 모듈의 관리를 쉽게 하게 도와주는 것
(MAVEN 과 같은 의존성 라이브러리 관리 기능과 비슷함)
-중앙 저장소 : 모든 사용자가 접근할 수 있는 곳
-package.json : 프로젝트 관련 정보 저장, 의존선 확장 모듈 정보도 담겨 있어 공유
각 개발자가 자신의 로컬 환경에서 필요한 의존 모듈을 설치할 수 있음
3. 4.2 npm 설치
노드 0.6.3부터 npm이 노드에 포함되어 함께 설치된다.
다음 명령어를 통해 설치 여부를 확인 할 수 있다.
$ npm –v
1.1.0-beta-4
4. 4.3 npm을 이용한 확장 모듈
설치 /usr/local/lib과 같은 node설치 경로에
글로벌 설치 : 커맨드 창에서 직접 쓰는 경우.
node_modules디렉토리 아래에 설치
로컬 설치 : require(‘모듈명’) 으로 접근하는 경우. 현재 위치 기준 node_modules
디렉토리에 설치
글로벌 설치
[nodemon : 커맨드라인에서 유틸리티 도구 처럼 사용하는 모듈]
$ npm install nodemon –g
$ npm list –g
로컬 설치
[ request 모듈]
$ npm install request
npm [명령어] [타겟 모듈이름] [옵션]
http://search.npmjs.org
5. 4.5 설치된 확장 모듈 관리
모듈 업데이트 : $ npm update 모듈명
특정 버전 설치 : $ npm install 모듈명@버전
버전 확인 : $ npm info 모듈명
모듈 삭제 : $ npm uninstall 모듈명
6. 4.6 package.json을 이용한 프로젝트 관리
{
“name” : “application-name”
, “version” : “0.0.1”
, “private” : true
, “dependencies” : {
“express” : “2.4.6”
, “jade” : “>= 0.0.1”
}
}
name, version, description,
keywords, homepage,
author, contributors,
repository, scripts, config,
private, dependencies 등
package.json 자동 생성
$ npm init : 기본적인 package.json을 만들 수 있음
$ npm install 모듈명 –save : dependencies필드에 자동으로 모듈에 대한 정보를 추가
7. 5.1 restler를 이용한 트위터 REST API
사용
트위터의 Open API : http://search.twitter.com/search.json?q=test&result_type=recent&
rpp=100&seince_id=1
{ completed_in : 0.222,
max_id : 1245919293949919192390,
max_id_str : ‘124518862616213312’,
next_page : ‘?page=2&max_id=1245188626151213312&q=text&rpp=100’,
page : 1,
query : ‘text’,
refresh_url : ‘?since_id = 124518852515213312&q=text’,
results:
[ { created_at: ‘Thu, 13 Oct 2011 16:16:22 +0000’,
from_user: ‘twitpiclvr’,
…
}],
results_per_page : 100,
since_id : 1,
since_id_str :’1’}
8. 5.1 restler를 이용한 트위터 REST API
사용
REST 클라이언트 라이브러리 restler 설치
$ npm install restler
get(url, options)
post(url, options)
get 과 post로 요청을 보내고, 콜백을 통해 응답을 받고 restler가 content-type에 따라
응답을 자동으로 JSON이나 XML로 파싱해 준다.
9. 5.1 restler를 이용한 트위터 REST API
사용
var rest=require('restler')
, fs = require('fs')
, schedule = require('node-schedule');
var Tweet = {
sinceId: '1'
, isOpened: false
, getTweets: function(search, callback){
search = encodeURIComponent(search);
fs.readFile('./maxid.txt', function(err, maxId){
if(err){Tweet.sinceId=1;}
else{ Tweet.sinceId=maxId;}
…
10. 5.1 restler를 이용한 트위터 REST API
사용
rest.get(
'http://search.twitter.com/search.json?q=' + search +
'&result_type=recent' + '&rpp=100' +
'&since_id=' + this.sinceId
).on('complete', function(data){
var text="";
data.results.forEach(function(elem, index, array){
text += elem.from_user+':'+
elem.text + ' at' + elem.created_at +'n';
});
if(!Tweet.isOpened){
fs.open('./tweets.txt','a',0666,function(err,fd){
if(err){throw err;}
…
11. 5.1 restler를 이용한 트위터 REST API
사용
isOpened=true;
var buffer = new Buffer(text);
fs.write(fd, buffer, 0, buffer.length, null
,function(err){
fs.close(fd,function(){
tweet.isOpened = false;
fs.writeFile('./maxid.txt'
, data.max_id.toString()
,function(err){}
);
});
});
});
}
});
});
}
}
…
12. 5.1 restler를 이용한 트위터 REST API
사용
var rule = new schedule.RecurrenceRule();
rule.hour = new schedule.Range(0,23);
rule.minute = [0,5, 10,15, 20,25, 30,35, 40,45, 50];
var j = schedule.scheduleJob(rule, function(){
Tweet.getTweets('#nodejs');
console.log('Backup is completed at ' + new Date());
});