2011-12-05 5 views
3

node.js에서 간단한 웹 서비스를 만들고 있습니다. 안무가를 사용하여 http 호출을 라우팅합니다. 이 코드는 잘 작동 :이 레코드가 반환되고, 잘 작동 : 당신이 볼 수 있듯이Node.js 매개 변수를 mongodb 요청으로 전달

router.get('/search/*', function(req, res, term){ 
    res.writeHead(200, {'Content Type:':'text/plain'}); 
    db.collection('foo').find({'a':1}).toArray(function(err, items){ 
    console.log(items); 
    res.write(JSON.stringify(items)); 
    res.end(); 
    }); 
    }); 

는 찾기 방법은 {1 '은'}을 찾습니다. 하지만 라우터에서 검색어에 검색어를 전달하려면 null 응답이 표시됩니다.

router.get('/search/*', function(req, res, term){ 
    res.writeHead(200, {'Content Type:':'text/plain'}); 
    db.collection('foo').find({'a':term}).toArray(function(err, items){ 
    console.log(items); 
    res.write(JSON.stringify(items)); 
    res.end(); 
    }); 
    }); 

아이디어가 있으십니까?

편집 : 아래에 제안 된 바와 같이 용어의 가치를 확인 했으므로 예상 한대로 1이됩니다.

+0

용어의 가치를 확인 했습니까 ?? console.log (용어) – simplyharsh

+0

간단히 말해서 예, 예상대로입니다 – 2bard

+0

오류 값을 확인 했습니까? 쿼리를 실행하는 데 문제가 있으면 err은 null이 아니며'items'는 null이됩니다. 항상 확인하는 것이 좋습니다. – mpobrien

답변

1

새로운 json 개체를 작성한 다음 'a'매개 변수를 나중에 용어로 설정하는 등의 해결 방법을 발견했습니다.

var searchterm = {'a':2}; 
searchterm.a = term; 

나는 내가 완전히 여기에 이해하고 있지 않다 JSON 객체를 만드는 방법에 대한 뭔가가있다 생각한다.

1

db 연결에 실제 라우팅보다 시간이 오래 걸릴 수 있습니까?

"용어"를 정의하고 응답을 받으면 용어가 db에서 발견되지 않거나 db-connection이 어떤 식 으로든 실패합니다.

콜백 함수에서 db를 초기화하고 호출하는 방법이 있습니다.

router.get('/search/*', function(req, res, term){ 
    res.writeHead(200, {'Content Type:':'text/plain'}); 
    var db = new mongo.Db('dbname', server); 
    db.open(function(err, db){ 
    db.createCollection("collection_name", function(err, collection){ 
     db.collection('foo').find({'a':term}).toArray(function(err, items){ 
     console.log(items); 
     }); 
    }); 
    }); 
}); 

작동하는 경우 db.close();

잘못된 구문 예약.

+0

'term'(1)이 (가) 데이터베이스에있는 경우 'term'변수가 데이터베이스를 쿼리 할 때 올바르게 초기화되었습니다. – 2bard

관련 문제