我有一个简单的目的地的宁静api。它使用Express构建,并使用MySQL数据库进行续订。 它有城市,国家和地区。城市属于属于区域的国家。
现在,我必须做复杂的查找操作。例如:
获取/城市
{
where: {
name: {'$like': 'bue%'}
},
include: [{model: Country, where: {region_id: 1}}]
}
有了这个,我试图获取名称以' bue'开头的所有城市,但只有哪个国家/地区的region_id为1。 如果我指定要返回的字段,可以向前迈出一步。模型有一些我可能不需要的文本字段,因此上面的查询变为:
{
where: {
name: {'$like': 'bue%'}
},
attributes: ['id', 'name'],
include: [{
model: Country,
attributes: ['id', 'name'],
where: {region_id: 1}
}]
}
这已经很复杂了。图像,如果我想要包含国家/地区的区域并在那里添加一些过滤器。
所以,我的问题是:如何传递这个复杂的查询? 现在我正在使用带编码的json的url params。所以我有类似的东西:
where: {name: {'$like': 'bue%'}} => Becomes:
/cities?where=%7Bname%3A%20%7B%27%24like%27%3A%20%27bue%25%27%7D%7D
你可以看到这导致了一个非常难以使用的丑陋的URL。如果我的查询很复杂,则URL会变成怪物。如果我的where
参数为OR / AND且复杂的条件,它会变得非常大而且很混乱。
无论如何,这就是问题所在。我应该保持原样。有什么更合适的方式来做这件事。 一些例子将不胜感激。
答案 0 :(得分:0)
一种"标准"解决方案是POST复杂查询(使用HTTP正文中的查询),让服务器将其存储在某处并返回引用存储查询的新URL。之后,客户端可以在新查询URL上发出GET以获取结果。