我正在使用node.js中的一个简单的Web服务。我正在使用编舞来路由http调用。这段代码工作正常:
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 :(得分:1)
db-connection是否需要比实际路由更长的时间?
如果您定义“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();
保留语法错误。
答案 1 :(得分:1)
我发现一个解决方法是建立一个新的json对象,然后将'a'参数设置为术语,例如。
var searchterm = {'a':2};
searchterm.a = term;
我怀疑创建JSON对象有什么我不完全理解的。