2011-12-05 74 views
3

我正在研究node.js中的一个简单Web服务。我正在使用编排器来路由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(); 
    }); 
    }); 

正如您所看到的,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(); 
    }); 
    }); 

任何想法吗?

编辑:我已经检查了术语的值,如下面的评论中所建议的那样,它是1,这是我预期的结果。

+0

你检查了术语的价值吗? console.log(term) – simplyharsh

+0

simplyharsh,是的,我有,这是预期的 – 2bard

+0

你检查了err的值吗?如果执行查询有任何问题,则err将为非null,并且'items'为空。经常检查是很好的。 – mpobrien

回答

1

我发现一个解决方法是构建一个新的json对象,然后将'a'参数设置为后来的例如

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

我怀疑是有关于创建JSON对象的东西,我不完全理解这里。

1

难道是数据库连接比实际路由花费的时间更长吗?

如果你定义了“term”并得到一个响应,那么它很可能在db中找不到这个术语,或者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