我在后端使用Sails.js开发应用程序,但我无法按如下方式验证请求:
我想根据登录用户的属性阻止对某些资源的访问。我启用了REST API蓝图,并禁用了快捷方式路由。我有以下代码:
User.findOne()
.where(query)
.exec(function(err, user) {
if (user.team !== req.user.team) {
return res.view('403');
}
return next();
});
其中query
是我想要进行数据库搜索的标准。我们的想法是,用户只能访问所请求的用户,如果他们在同一个"团队"。
问题是用户至少可以向后端发出以下类型的请求,可能更多(我对风帆不太熟悉,如果还有更多类型,请告诉我):
localhost:1337/user?id=1
在这种情况下,req
对象将具有req.query
属性,我可以将其作为query
原样传递。现在,以下类型的请求也是可能的:
localhost:1337/user/1
此处req.query
将是一个空对象,而req.params
是[ id: '1']
。
现在这很麻烦;如果我理解正确,req.params
的类型不是JSON对象,所以我无法将其作为query
传递给它。另外,我必须将id
参数转换为Int,因为它由于某种原因(?)原来是一个字符串。
我要问的是,我是否可能错过以同样方式处理这两种请求的方式,或者我是否必须以某种方式考虑这两种情况喜欢
var query = isEmpty(req.query) ? req.params : req.query
在这种情况下,我必须将req.params
转换为我可以传递给数据库搜索的内容,并且通常会很麻烦且不方便。我想知道处理这种情况的最佳方法是什么。
答案 0 :(得分:1)
嗯,有趣的是,在发布问题之后你恰好找到了答案。显然,有一个名为req.allParams()
的函数,其中包括从url路径,查询字符串和请求体中解析的参数。"根据官方文件。我不知道我以前从未碰到过这个问题,但现在我做了,而且看起来很有效,所以万岁!