Javascript 仅当值存在时链接方法(js)

Javascript 仅当值存在时链接方法(js),javascript,express,mongoose,Javascript,Express,Mongoose,我只想在存在值的情况下链接其他方法 这适用于node/express支持的rest api。仅当为用户希望过滤的内容提供了查询字符串时,它才应该过滤返回的结果。例如,index/tasks?completed=true应返回所有已完成的任务,而index/tasks应仅返回所有任务。我可以设置一个if-else语句来检查查询字符串是否存在,然后使用链接的所有附加设置复制find调用,但这似乎是一种不好的方法。如果有一种更像未注释代码的方法,那将是一个不错的选择 注释后的代码很好,可以正常工作 /

我只想在存在值的情况下链接其他方法

这适用于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)
}

这不完全是您所要求的,但为了节省您的时间,请查看聚合管道—这非常简单。