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



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

有趣的是,在发布问题后,你碰巧找到了答案。据官方文档介绍,显然有一个名为req.allParams()的函数"包括从url路径、查询字符串和请求体解析的参数"。我不知道我以前怎么从来没有遇到过这种情况,但现在我遇到了,而且它似乎起了作用,太棒了!

相关内容

  • 没有找到相关文章

最新更新