REST级别2(相关模型)范围 - strongloop api

时间:2015-12-05 05:10:03

标签: node.js loopbackjs strongloop

我在文档中发现scopes使您能够指定可以作为模型上的方法调用引用的常用查询。下面我有categories模型。我正在尝试创建适用于与模型games的关系的范围。不幸的是,下面什么都不做如何将范围应用于关系,如下所示?

GET /Categories/{id}/games - 这可以获得所有游戏

公共/模型/ category.json

"relations": {
    "categories": {
      "type": "hasMany",
      "model": "game",
      "foreignKey": ""
    }
},

/common/models/game.json

 "scopes": {
    "mature": {"where": {"mature": true}}
  },
  "validations": [],
  "relations": {
    "category": {
      "type": "belongsTo",
      "model": "category",
      "foreignKey": ""
    }
  }

我希望能够通过endpoing获取数据:/Categories/{id}/games/mature

表架构:

catgories

category_name       category_id 
-------------       -----------
fighting            1001
racing              1002
sports              1003

games

game_id         game_name           category_id     mature
-----------     ------------        -----------     --------------
13KXZ74XL8M     Tekken              10001           true
138XZ5LPJgM     Forza               10002           false

1 个答案:

答案 0 :(得分:2)

Loopback api基于swagger,而scopes是环回中的新概念。

目前它不支持相关方法,即您无法从相关模型访问它,即category(在您的情况下),但仅限于scope定义的模型,即{ {1}}。

因此,您现在可以使用远程方法实现您想要的目标。

使用game Loopback Remote Methods

  

common / models / category.js添加以下行。

Remote Methods
  

现在在你的common / models / category.json中     将其添加到您的ACL属性。

module.exports = function(Category) {

    Category.mature = function(id, filter, callback) {
        var app = this.app;
        var Game = app.models.Game;
        if(filter === undefined){
             filter = {};
        }

        filter.where  = filter.where || {};

        filter.where.categoryId =  id;
        filter.where.mature = true;

        Game.find(filter, function(err, gameArr) {
            if (err) return callback(err);
            console.log(gameArr);
            callback(null, gameArr);
        });
    }

    Category.remoteMethod(
        'mature', {
            accepts: [{
                arg: 'id',
                type: 'number',
                required: true
            },
            {
                arg: 'filter',
                type: 'object',
                required: false
            }
            ],
            // mixing ':id' into the rest url allows $owner to be determined and used for access control
            http: {
                path: '/:id/games/mature',
                verb: 'get'
            },
            returns: {
                arg: 'games',
                type: 'array'
            }
        }
    );

};

现在你可以通过..... ..... "acls": [ { "principalType": "ROLE", "principalId": "$everyone", "permission": "ALLOW", "property": "mature" } ] 获得所有成熟类型的游戏  get method

或者您也可以立即从http://0.0.0.0:3000/api/categories/:id/games/mature尝试API。