Couchbase Server
#5. node.js를 이용하여 뷰를 호출하기
조대협 http://bcho.tistory.com
앞서 설명한 뷰를 node.js 카우치베이스 SDK를 이용해서 호출해보자,
카우치베이스는 node.js와 몽고DB만큼이나 궁합이 잘 맞는 것 같다. 매우쉽게 뷰를 호출할 수 있다. 뷰 호출 메서드는
var viewQuery = bucket.view(“디자인도규먼트 이름”,”뷰 이름”,{옵션1:값,옵션2:값,…})
로 뷰쿼리를 생성한 후에,
viewQuery.query(function(err,results){…} );
로 호출하면, 호출 성공시, 결과가 result 변수로 리턴된다.
그러면 간단한 예제를 보자. “mybucket”이라는 버킷이 있고, 안에 다음과 같은 데이타가 있다.
[ { id: 'user0002', key: [ 'us', '75', 'female' ], value: 1 },
{ id: 'user0004', key: [ 'us', '14', 'female' ], value: 1 },
{ id: 'user0003', key: [ 'us', '08', 'female' ], value: 1 },
{ id: 'user0001', key: [ 'korea', '75', 'male' ], value: 1 },
{ id: 'user0005', key: [ 'canada', '69', 'male' ], value: 1 } ]
뷰의 경로는 _desgin/dev_sample 디자인 도규먼트아래에, filter라는 이름으로 다음과 같이 정의되어 있다.
function (doc, meta) { var year = doc.ssn.substring(0,2); emit([doc.country,year,doc.sex],1); } |
이제, node.js와 Express 프레임웍을 이용해서, 이 뷰를 호출 하는 간단한, REST API를 만들어보자.
var express = require('express'); var routes = require('./routes'); var user = require('./routes/user'); var http = require('http'); var path = require('path'); var couchbase = require('couchbase');
var bucket = new couchbase.Connection({ 'bucket':'mybucket', 'host':'127.0.0.1:8091' },function(err){ if(err){ console.error('couchbase server connection error'); throw err; } }) var app = express();
// all environments app.set('port', process.env.PORT || 3000); app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade'); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.json()); app.use(express.urlencoded()); app.use(express.methodOverride()); app.use(express.session({ secret: 'your secret here' })); app.use(app.router); app.use(express.static(path.join(__dirname, 'public')));
// development only if ('development' == app.get('env')) { app.use(express.errorHandler()); }
app.get('/', routes.index); app.get('/myview',function(req,res){ console.log('myview'); var viewQuery = bucket.view('dev_sample','filter' ,{reduce:false,descending:true,startkey: [ 'us', '75', 'female' ],endkey:[ 'korea', '75', 'male' ]}); viewQuery.query(function (err,results){ console.log(results); console.log(typeof (results)); if(err) { console.error(err); }else{ res.send(results); }// else });
});
http.createServer(app).listen(app.get('port'), function(){ console.log('Express server listening on port ' + app.get('port')); });
|
앞부분에 카우치베이스를 연결하는 부분은 http://bcho.tistory.com/926 의 예제와 동일하다.
var viewQuery = bucket.view('dev_sample','filter'
,{reduce:false,descending:true,startkey: [ 'us', '75', 'female' ],endkey:[ 'korea', '75', 'male' ]});
와 같이 뷰 쿼리를 만들었는데, 여기서 주목할 부분은 option 부분이다.
- reduce:false로 하여, 리듀스함수를 실행하지 않고, 맵 함수만 수행하도록 하였으며
- descending:true로 하여, 내림차원 정렬이 되도록 하였다.
- startkey,endkey를 정의하여, 내림 차순으로 정리한 뷰에서 키의 값이 [‘us’,’75’,’female’]~[‘korea’,’75’,’female’]인 결과만 쿼리하도록 설정하였다.
다음으로 viewQuery.query(function (err,results){ 를 호출하여, 뷰쿼리를 호출한후에, 마지막으로 res.send(results); 를 이용하여 리턴된 결과값을 출력하였다.
※ 결과값은 JSON 도큐먼트로 리턴되기 때문에 바로 JSON 형태로 출력된다.
다음은 예제에 대한 실행 결과 화면이다.
'클라우드 컴퓨팅 & NoSQL > CouchBase' 카테고리의 다른 글
카우치베이스(Couchbase) 서버-#6 아키텍쳐 구조 살펴보기 (1) | 2014.07.20 |
---|---|
카우치베이스(Couchbase) 서버-#4 뷰(View) 이해하기 (0) | 2014.07.13 |
Couchbase bulk insert (0) | 2014.07.11 |
카우치베이스(Couchbase) 서버-#3 node.js를 이용한 카우치베이스 서버 CRUD 구현하기 (0) | 2014.07.08 |
카우치베이스(Couchbase) 서버-#2 기본 개념 잡기 (1) | 2014.07.07 |