在风帆v1.0中禁用模型的自动填充

时间:2017-08-14 18:29:37

标签: node.js sails.js waterline

我正在使用Sailsjs v1.0.0-36。我想禁用模型填充。

所以当我向http://my-app/pets发送GET请求时:

[
  {
    id: 1,
    breed: 'Wolves',
    type: 'Direwolf',
    name: 'Ghost',
    owner: 1, //user id
  }, 
  {
    id: 2,
    breed: 'Wolves',
    type: 'Direwolf',
    name: 'Summer',
    owner: 1, //user id
  },
]

当我向http://my-app/users发送GET请求时:

[
  {
     id: 1
     firstName: 'John',
     lastName: 'Snow',
     pets: [ //array of pets id
       1,
       2,
     ]
  }
]

其中User模型定义为

// myApp/api/models/User.js
// A user may have many pets
module.exports = {
  attributes: {
    firstName: {
      type: 'string'
    },
    lastName: {
      type: 'string'
    },

    // Add a reference to Pets
    pets: {
      collection: 'pet',
      via: 'owner'
    }
  }
};

Pet模型定义为

// myApp/api/models/Pet.js
// A pet may only belong to a single user
module.exports = {
  attributes: {
    breed: {
      type: 'string'
    },
    type: {
      type: 'string'
    },
    name: {
      type: 'string'
    },

    // Add a reference to User
    owner: {
      model: 'user'
    }
  }
};

在Sails v0.12.0中,您可以通过设置

/config/blueprints.js中执行此操作
populate = false

但是在Sails v1.0中已经弃用了这个,在this之后我们可以通过覆盖parseBlueprintOptions来实现文档,而this是函数的默认实现。

如何覆盖它以达到所需的效果?

2 个答案:

答案 0 :(得分:0)

根据这个commit sailjs 1.0开始再次支持这个选项。

答案 1 :(得分:0)

在这里看到一个实现: https://github.com/balderdashy/sails/issues/4130#issuecomment-310720365

parseBlueprintOptions(req) {
    var queryOptions = req._sails.hooks.blueprints.parseBlueprintOptions(req);

    if(!req.param('populate', false) && !queryOptions.alias) {
      queryOptions.populates = {};
    }
    return queryOptions;
  }