Javascript 仅当值存在时链接方法(js)
我只想在存在值的情况下链接其他方法 这适用于node/express支持的rest api。仅当为用户希望过滤的内容提供了查询字符串时,它才应该过滤返回的结果。例如,index/tasks?completed=true应返回所有已完成的任务,而index/tasks应仅返回所有任务。我可以设置一个if-else语句来检查查询字符串是否存在,然后使用链接的所有附加设置复制find调用,但这似乎是一种不好的方法。如果有一种更像未注释代码的方法,那将是一个不错的选择 注释后的代码很好,可以正常工作Javascript 仅当值存在时链接方法(js),javascript,express,mongoose,Javascript,Express,Mongoose,我只想在存在值的情况下链接其他方法 这适用于node/express支持的rest api。仅当为用户希望过滤的内容提供了查询字符串时,它才应该过滤返回的结果。例如,index/tasks?completed=true应返回所有已完成的任务,而index/tasks应仅返回所有任务。我可以设置一个if-else语句来检查查询字符串是否存在,然后使用链接的所有附加设置复制find调用,但这似乎是一种不好的方法。如果有一种更像未注释代码的方法,那将是一个不错的选择 注释后的代码很好,可以正常工作 /
//nice if it works
var tasks = await Task.find({owner: req.user._id})
.if(req.query.completed){
.where({completed: req.query.completed})
}
.limit(parseInt(req.query.limit))
.skip(parseInt(req.query.skip))
.sort(ascending+field)
//works
// if(req.query.completed){
// var tasks = await Task.find({owner: req.user._id})
// .where({completed: req.query.completed})
// .limit(parseInt(req.query.limit))
// .skip(parseInt(req.query.skip))
// .sort(ascending+field)
// }else{
// tasks = await Task.find({owner: req.user._id})
// .limit(parseInt(req.query.limit))
// .skip(parseInt(req.query.skip))
// .sort(ascending+field)
// }
//check there were tasks and send it off
if(!tasks){
res.status(404).send()
}
res.send(tasks)
是否有一种方法可以执行类似于
//nice if work
code的操作?您可以创建一个查询对象,检查查询字符串是否存在,然后将字段添加到此对象
例如:
var query = {owner: req.user._id};
if(req.query.completed) query.completed = req.query.completed;
var tasks = await Task.find(query)
.limit(parseInt(req.query.limit))
.skip(parseInt(req.query.skip))
.sort(ascending+field)
使用
RegExp
if (req.query.completed) {
var tasks = await Task.find({ owner: req.user._id })
.where({ completed: req.query.completed || new RegExp('.*') })
.limit(parseInt(req.query.limit))
.skip(parseInt(req.query.skip))
.sort(ascending+field)
}
这不完全是您所要求的,但为了节省您的时间,请查看聚合管道—这非常简单。