我正在尝试编写一个简单的API从数据库中获取产品。我想通过给定的特定参数来过滤此数据,这些参数是可选的:
-sanitizer=thread
我的控制器如下:
swiftc
}
但是,这仅适用于具有3个参数的URL。如何通过查询无参数,单参数和多参数的API灵活地从数据库获取数据?
答案 0 :(得分:0)
因此,您无法真正做到完全那样的路由。 “可选”路线参数的概念不适用于路径参数。例如,您不能仅以现有方式搜索模型,如果要指定模型,则必须确定要输入类型和年份。
如果必须使用路径,则需要以粒度的相反顺序定义三个路由:
router.get('/articles/:type/:year/:model', api_controller.articles);
router.get('/articles/:type/:year', api_controller.articles);
router.get('/articles/:type', api_controller.articles);
由于未共享数据结构,因此不确定查询是否正确,但是通常如果尝试对null进行匹配,则mongodb会忽略该参数,因此我认为已经设置了该参数。
现在,如果是我,我根本不会在路径上匹配。相反,我只是使用查询字符串作为搜索参数,就像这样:
router.get('/articles', api_controller.articles);
然后在控制器中:
// now someone calls /articles?year=2017&type=whatever or could call /articles?model=some-name
exports.articles = async (req, res, next) => {
const articles = await Article.find({
'models': {
$elemMatch: {
'year': req.query.year,
'category': req.query.type,
'name': req.query.model,
}
}
});
res.send(articles);
}