通过多种条件获取资源的最佳做法是什么?

使用Express.js和MongoDB我想得到所有的教师列表,当没有查询参数与请求的url,我做像下面的条件就像查询时发现,否则这样做,是否有效? 或者任何好的build议。 提前致谢

export const getTeachers = (req, res, next) => { if(req.query.course_id) { try { Teacher.find({'course_ids':req.query.course_id}).exec() .then((teachers) => { if (!teachers) { return next(errorPlaceHolder(403, false, 'no teacher found')); } return res.status(200).json({ success: true, message: 'Read course teacher', teachers: teachers }) }) .catch((error) => { next(error); }); } catch (e) { res.status(500).json({ success: false, message: 'Error in get Teachers', error: e }); } }else{ try { Teacher.find().exec() .then((teachers) => { if (!teachers) { return next(errorPlaceHolder(403, false, 'no teacher found')); } return res.status(200).json({ success: true, message: 'Read all teacher', teachers: teachers }) }) .catch((error) => { next(error); }); } catch (e) { res.status(500).json({ success: false, message: 'Error in get Teachers', error: e }); } } } 

你可以像这样优化代码

 var findCriteria = {} if(req.query.course_id) { findCriteria['course_ids'] = req.query.course_id; } Teacher.find(findCriteria).exec() .then((teachers) => { }) 

我猜你可以使用$查询。 某些操作可能需要类似的东西

 Teacher.find({$where: function() { if(req.query.course_id && req.query.course_id != this.course_id){return false};return true; }}).exec() .then((teachers) => { } 

更多关于$的地方

另外请注意,$哪里不使用索引,所以这是有点昂贵。