将Node.js参数传递给mongodb请求

时间:2011-12-05 18:27:35

标签: javascript node.js mongodb nosql

我正在使用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,这正是我所期望的。

2 个答案:

答案 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对象有什么我不完全理解的。