仅在Sails模型中存储必要的数据

时间:2014-11-04 14:29:47

标签: node.js mongodb sails.js data-modeling waterline

我是Sails的新手,面对模特的小问题 我已经定义了一个用户模型如下:

module.exports = {  
  attributes: {
   firstName: {
     type: 'string'
   },
   lastName: {
      type: 'string'
   },
   email: {
     type: 'email',
     required: true
   },

   password: {
     type: 'String'
   },
   passwordSalt: {
     type: 'String'
   },
   projects:{
     collection: 'ProjectMember',
     via: 'userId'
   }
 }
};  

我还有一个名为Plan的模型,它将用户作为其外键:

module.exports = {
   planId: { type: 'string'},
   userId: { model: 'User'}
};  

现在,Plan会存储所有用户数据。有没有什么办法可以限制计划模型只保留一些用户详细信息,如firstName,lastName,email和projectMembers,而不是存储其他个人信息。像密码,密码盐等?

提前致谢

2 个答案:

答案 0 :(得分:1)

计划不存储用户数据,它只存储对用户模型中找到的用户数据的引用。

答案 1 :(得分:1)

计划模型不会存储用户数据。它只存储在其模式中定义的数据值,即planId和userId。如果您只想返回一些用户详细信息,那么您可以这样做:

计划模型中:

首先在模型中定义toApi方法:

module.exports = {
   attributes : {
   planId: { type: 'string'},
   userId: { model: 'User'},
   toApi :toApi
}
};  



 function toAPi(){
     var plan = this.toObject();
     return {
       firstName : plan.userId.firstName,
       lastName :  plan.userId.lastName,
       email : plan.userId.email,
       projectMembers : plan.userId.projectMembers
     };
    }

然后在方法中,执行以下操作:

function getUserData(){   
 Plan
    .find()
    .populate('userId')
    .then(function(data){
      return data;
    })
}

在计划控制器中,执行以下操作:

Plan
.getUserData()
.then(function(userData){
  return res.ok(userData.toApi());
})