网址中的帆蓝图查询不起作用
Posted
技术标签:
【中文标题】网址中的帆蓝图查询不起作用【英文标题】:sails blueprints query in url not working 【发布时间】:2018-01-23 19:25:04 【问题描述】:我对我的 api 有各种 GET http 调用,格式如下:
/api/posts?userId=3
但是,它不会按其userId
列过滤帖子,而只会返回所有帖子,而不管帖子的 userId 是什么。
这种语法在我过去的项目中也有效,并记录在 here 中。 (他们给出的例子是GET /purchase?amount=99.99
)。
我看到的问题没有以这种方式通过默认路由解决查询语言,因此我无法找到帮助。对可能出现的问题有任何猜测吗?
更新:
什么按预期工作
req.query
正在被策略设置和读取(例如,?userId=3
被 req.param("userId")
找到)
/api/posts?userId=3&populate=userId
填充 userId
字段,(但仍返回所有用户的所有帖子)
按主键过滤(例如?id=5
)过滤并按预期只返回一条记录
在 api 或sails 控制台中工作时,(例如Posts.find(userId: 3)
)可以工作
什么不符合预期
外键过滤(例如?userId=6
)
按非外键过滤(例如?name=test
)
过滤使用where
(例如&where="userId":1
)
【问题讨论】:
只是抛出一些想法......你有 PostsController 吗?你的蓝图休息选项打开了吗?我假设userId
连接到User
模型...如果您尝试过滤非链接字段,过滤是否有效?
@arbuthnott 我确实有一个 PostsController,并且蓝图其余设置为 true
。是的,模型中的 userId 属性是userId: model: 'users', required: true
。但这没关系,因为每条记录都有一个 userId 列,所以我相信查询应该以任何方式工作(?)。回复:未链接的字段,/api/posts?userId=3&asdf=3
同样返回所有帖子,如果这回答了您的问题
我没有在控制器中定义find
控制器动作,它只是使用水线默认值
我询问了一个非链接字段,因为在后台,我知道 Waterline 可能会为链接字段命名一些意想不到的东西(如 _post_user
等),这可能是使用时的错误来源蓝图 API。我想知道/api/posts?title=sometitle
之类的东西是否正确过滤。如果是这样,我可能会开始深入研究 Waterline 和原始数据库,以查看我的 userId 字段在数据库级别的真实外观,并查看链接字段的命名是否存在脱节。
@arbuthnott 嗯,好主意。是的,其他查询(非外键)也没有过滤结果。但是使用查询填充(例如?populate=userId
确实有效,值得。
【参考方案1】:
事实证明,我在策略中的每个查询中都添加了“where”子句(例如,"where: "status": "active"
)。在查询字符串中自动添加一个“where”overrides the other params,因此没有看到任何其他内容。 (准确地说,如果你有 where 子句,则永远不会看到其他条件)
由于某种原因,“where”也无法为sails 0.12.13 设置搜索条件,所以我最终破解了sails 中的parseCriteria
函数actionUtils,并使用了他们为v 提供的函数。 1 对我有用。
希望以后能对大家有所帮助
【讨论】:
以上是关于网址中的帆蓝图查询不起作用的主要内容,如果未能解决你的问题,请参考以下文章