我正在 node.js 中开发一个简单的网络服务。我正在使用 choreographer 来路由 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();
});
});
有什么想法吗??
编辑:我已经检查了 term 的值,正如下面评论中所建议的那样,它是 1,这正是我所期望的。
最佳答案
会不会是数据库连接比实际路由花费的时间更长?
如果您定义“术语”并得到响应,则很可能在数据库中找不到该术语或数据库连接以某种方式失败。
一种方法是从回调函数初始化和调用数据库。
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();
保留语法错误。
关于javascript - 将 Node.js 参数传递给 mongodb 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8390018/