【发布时间】:2016-01-04 09:23:43
【问题描述】:
我有一个以 couchbase 作为数据库的 express 应用程序,并且有一个这样的 express 路由器:
router.get('/:key', function(req, res, next){
var champId = req.params.key;
var startKey = [champId, 0, false];
var endKey = [champId, 100000, true];
var input = {
'bucket' : dbbucket,
'document' : dbdocument,
'view' : dbview,
'viewStartKey' : startKey,
'viewEndKey' : endKey,
'inclusiveEnd' : true,
'groupLevel' : 3
};
dbconnect.dbQuery(input, function(dbError){
res.status(500).send('Could not retrieve the requested data');
}, function(results) {
res.status(200).send(results);
});
});
router.get('/', function(req, res, next){
var input = {
'bucket' : dbbucket,
'document' : dbdocument,
'view' : dbview,
'groupLevel' : 3
};
dbconnect.dbQuery(input, function(dbError){
res.status(500).send('Could not retrieve the requested data');
}, function(results) {
res.status(200).send(results);
});
});
我的 dbQuery 方法是:
function queryExecuter (input, error, callback){
var constructedQuery = queryConstructor(input.document, input.view);
if(input.viewKey){
constructedQuery = constructedQuery.key(input.viewKey);
}
if(input.viewStartKey && input.viewEndKey && input.inclusiveEnd){
constructedQuery = constructedQuery.range(input.viewStartKey, input.viewEndKey, input.inclusiveEnd);
}
if(input.groupLevel){
constructedQuery = constructedQuery.group_level(input.groupLevel);
}
input.bucket.query(constructedQuery, function(dbError, results) {
if(dbError) {
error(dbError);
return;
}
callback(results);
});
}
当我尝试在没有 startKey 和 endKey 的情况下运行时,数据返回正常,但是当我使用 startKey 和 endKey 运行时,我得到一个空数组作为响应(我应该得到 159 条记录,因为这是我得到的数据量在没有 startKey 和 endKey 的情况下运行,当我从 couchbase 控制台查询具有相同 startKey 和 endKey 的存储桶时,这就是我得到的)。我正在使用 nodejs 版本 4.2.1 和 couchbase 版本 4.1.0。我还尝试使用 startKey.toString() 和 endKey.toString()。结果还是一样。
【问题讨论】:
-
在输入
dbconnect.dbQuery方法之前,您能否通过console.log验证input变量是否包含您所期望的内容?查看一些示例数据和完整的示例请求也会有所帮助。将有助于排除故障点。