Sails.js:如何正确处理请求参数/查询到后端?

时间:2015-03-04 16:59:25

标签: http request sails.js waterline

我在后端使用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转换为我可以传递给数据库搜索的内容,并且通常会很麻烦且不方便。我想知道处理这种情况的最佳方法是什么。

1 个答案:

答案 0 :(得分:1)

嗯,有趣的是,在发布问题之后你恰好找到了答案。显然,有一个名为req.allParams()的函数,其中包括从url路径,查询字符串和请求体中解析的参数。"根据官方文件。我不知道我以前从未碰到过这个问题,但现在我做了,而且看起来很有效,所以万岁!