我是一个Node.js初学者开发人员,致力于开发带有可选查询参数的Express Rest API。
例如,为用户考虑以下架构:
phone: {
countryCode: String,
number: phoneType
},
phoneVerified: { type: Boolean, default: false },
emailVerified: { type: Boolean, default: false },
rating: Number,
balance: { type: Number, default: 0 },
occupation: String,
gender: { type: String, enum: genders },
我想在/ users中公开此资源,并允许通过可选查询字符串进行查询。
例如,/ users?emailVerified = true&phoneverified = false&gender = male&occupation = plumber&limit = 10
这应该返回所有符合条件的用户,同时保持几乎所有选项都是可选的。
以可维护且面向未来的方式做到这一点的最佳方法是什么?
方法1:我的第一种方法是使用if块来检查查询中存在哪些参数并相应地构建猫鼬查询,但这看起来很丑且很难阅读。
queryObj = {};
if (req.query.occupation) {
queryObject = {
...queryObject,
occupation: req.query.occuption
};
}
if (req.query.phoneVerified) {
queryObject = {
...queryObject,
phoneVerified: req.query.phoneVerifed
};
}
const users = await User.find(queryObject);
我还发现querymen package看起来很有希望。如果有经验的人可以指导我最佳做法是什么?预先感谢
答案 0 :(得分:1)
您的做法正确。您也可以尝试
queryObject = {};
if (req.query.params.occupation) {
queryObject.occupation= req.params.occuption
}
if (req.params.phoneVerified) {
queryObject.phoneVerified= req.params.phoneVerifed
}
const users = await User.find(queryObject);
您可以使用“。”向json添加新属性。