2011-12-05 9 views
3

私はnode.jsの単純なWebサービスを開発中です。振付師を使ってhttpコールをルーティングしています。このコードはうまく動作します:Node.jsパラメータをmongodbリクエストに渡す

ご覧のとおり、findメソッドは{'a':1}を探しますが、これは正常に動作し、レコードが返されます。私は、クエリにルータから検索用語を渡したいときしかし、私はヌル応答を取得:

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(); 
    }); 
    }); 

任意のアイデア誰?

編集:以下のコメントに示唆するように、私はtermの価値をチェックしました。それは1であり、これは私が期待したものです。

+0

用語の価値を確認しましたか? console.log(term) – simplyharsh

+0

単純に厄介です、そうです、それは期待通りです – 2bard

+0

errの値をチェックしましたか?クエリの実行に問題がある場合、errはnullでなく、 'items'はnullになります。常にチェックするのは良いことです。 – mpobrien

答えて

1

新しいjsonオブジェクトを作成し、 'a'パラメータを後にtermに設定するという回避策が見つかりました。

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

私はここで完全に理解されていないJSONオブジェクトの作成については疑問があります。

1

実際にルーティングするよりもdb接続に時間がかかることはありますか?

"term"を定義して応答を得た場合は、その用語が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