2014-09-19 2 views
0
exports.all = function(req, res) { 

    if(!req.query.questionid) { 
    Answer.find().sort('-created').populate('creator', 'username').exec(function(err, answers) { 
     if (err) { 
     res.json(500, err); 
     } else { 
     res.json(answers); 
     } 
    }); 
    } else { 
    Answer.find().sort('-created').where('questionid', req.query.questionid).populate('creator', 'username').exec(function(err, answers) { 
     if (err) { 
     res.json(500, err); 
     } else { 
     res.json(answers); 
     } 
    }); 
    } 
}; 

Я думаю, что довольно ясно, что я пытаюсь сделать - если предоставлен параметр запроса, я хочу запросить с фильтром where, а если нет, то я этого не сделаю. Там надо быть лучшим способом, чтобы написать это ...Лучший способ написать эту строку запроса мангуста?

ответ

1

Вы можете развалитесь ваша цепочка вызовов немного, так что вы можете включать только необходимые детали:

exports.all = function(req, res) { 

    var query = Answer.find().sort('-created').populate('creator', 'username'); 

    if(req.query.questionid) { 
    query = query.where('questionid', req.query.questionid); 
    } 

    query.exec(function(err, answers) { 
    if (err) { 
     res.json(500, err); 
    } else { 
     res.json(answers); 
    } 
    }); 
}; 
2

Вы можете достичь очень хороший подход, используя querymen.

var querymen = require('querymen') 

app.use('/', querymen.middleware({ 
    questionid: mongoose.Types.ObjectId, 
    sort: '-created' 
})) 

app.get('/', function(req, res) { 
    console.log(req.querymen) // {query: {questionid: <ObjectId>}, cursor: {sort: {created: -1}}} 
    Answer.find(req.querymen.query, null, req.querymen.cursor) 
    .populate('creator', 'username') 
    .exec(function(err, answers) { 
     if (err) { 
     res.json(500, err); 
     } else { 
     res.json(answers); 
     } 
    }) 
}) 
Смежные вопросы