如何有效地将多个req.query值从Express传递到Mongoose?

时间:2018-02-05 18:19:14

标签: node.js mongodb express mongoose

我使用Express.JS建立一个GET路由,它接受多个查询,不需要任何查询,我可以通过任何组合来获得不同的结果。

我是这样做的:

router.get("/api", (req, res) => {
    let query = {};

    if (req.query.paramOne) {
        query.paramOne = req.query.paramOne;
    }

    if (req.query.paramTwo) {
        query.paramTwo = req.query.paramTwo;
    }

    if (req.query.paramThree) {
        query.paramThree = req.query.paramThree;
    }

    if (req.query.paramFour) {
        query.paramFour = req.query.paramFour;
    }

    db.find(query).then(record => {
        res.json(record);
    });
});

这正是我想要的;我可以通过Mongoose任意数量的查询选项来过滤我的结果。但是,我不禁想到,如果没有四个if语句,有一种更有效的方法。

我尝试过:

db.find({
    paramOne: req.query.paramOne,
    paramTwo: req.query.paramTwo,
    paramThree: req.query.paramThree,
    paramFour: req.query.paramFour
}).then(record => {
    res.json(record);
})

但这只有在我传入所有四个参数时才有效。

2 个答案:

答案 0 :(得分:0)

如果query上的密钥将{1}}上的密钥映射为1到1,那么您可以迭代req.query密钥并通过{{3创建req.query对象}}

query

答案 1 :(得分:0)

这两个答案都有效。基于第二个,我想知道我是否甚至需要创建一个传递给查询的变量。事实证明,我可以做到:

router.get("/api", (req, res) => {
    db.find(req.query).then(record => res.json(record));
});

谢谢@peteb和@ rahul-sharma!