【发布时间】:2016-02-20 19:25:24
【问题描述】:
如果我把表格放在下面,它会在 Node.js mongodb 中变成一个有趣的错误:
locals.collection.find(filter, req.query);
返回以下错误:
MongoError: query selector must be an object
现在如果我手动把查询工作。 这个问题困扰很久了,试了好几种方法。
locals.collection.find({slug:'somak'}, req.query);
我正在使用以下功能:
exports.findAll = function(req, res, next) {
var locals = {},
section = req.params.section,
query = req.query,
filter = {};
if(query.filter) {
filter = query.filter.replace(/"(\w+)"\s*:/g, '$1:');
filter = filter.replace(/["]/g, "'");
}
console.log(filter);
delete query.filter;
async.series([
function(callback) {
MongoClient.connect(url, function(err, db) {
if (err) return callback(err);
locals.collection = db.collection(section);
callback();
});
},
function(callback) {
locals.collection.count(filter, function (err, result){
if (err) return callback(err);
locals.count = result;
callback();
});
},
function(callback) {
var cursor = locals.collection.find({slug:'somak'}, req.query);
if(req.query.page) {
cursor = cursor.skip(Math.abs(req.query.limit) * --req.query.page);
}
cursor.toArray(function(err, docs) {
if (err) return callback(err);
locals.docs = docs;
callback();
});
}
],
function(err) { //This function gets called after the three tasks have called their "task callbacks"
if (err) return next(err);
// Here locals will be populated with 'count' and 'docs'
res.json({
count: locals.count,
data: locals.docs
});
});
【问题讨论】:
-
console.log(filter)的值为{{slug:'somak'}}?req.query的值是多少? -
查询:{ filter: '{"title":"Test"}', limit: '5', page: '1', sort: '-posted' }