2016-04-26 85 views
1

在我的应用程序我有用户和一些用户是医务人员,有些是牙医,有些是营养师,当我得到我的使用我想发送一个JSON回用户和用户数据,这个数据是基于用户的两列(MODEL_ID和型号),即时通讯试图doind它与自定义的方法称为morphTo,洙我称之为模型用户sequelize模型自定义方法返回undefined

module.exports = function(sequelize, DataTypes) { 
    var user = sequelize.define('users', { 
    email: {type: Sequelize.STRING, field: 'email'}, 
    password: Sequelize.STRING, 
    name: Sequelize.STRING, 
    company_id: Sequelize.INTEGER, 
    rg: Sequelize.STRING, 
    cpf: Sequelize.STRING, 
    birth_date: Sequelize.STRING, 
    sex: Sequelize.STRING, 
    address: Sequelize.STRING, 
    number: Sequelize.STRING, 
    complement: Sequelize.STRING, 
    neighborhood: Sequelize.STRING, 
    city: Sequelize.STRING, 
    cep: Sequelize.STRING, 
    uf: Sequelize.STRING, 
    obs: Sequelize.STRING, 
    status_id: Sequelize.INTEGER, 
    model_id: Sequelize.INTEGER, 
    model: Sequelize.STRING, 
    deleted_at: Sequelize.STRING, 
    created_at: Sequelize.STRING, 
    updated_at: Sequelize.STRING, 
    }, {timestamps:false, attributes: { exclude : [ 'password' ]}, 
     classMethods: { 
     associate: function(models) { 
      user.belongsToMany(models.groups, { 
      through: { 
      model: models.user_groups 
      }, foreignKey:'user_id', as: 'groups'}), 
      user.belongsToMany(models.permissions, { 
      through: { 
      model: models.user_permissions 
      }, foreignKey:'user_id', as: 'permissions'}) 
     }, 
     morphTo: function(models, model_id, model){ 
      if(model == 'medics'){ 
      models.medics.findById(model_id).then(function(results) { 

       return results; 

      }); 

      }else if(model == 'employees'){ 
      models.employees.findById(model_id).then(function(results) { 

       return results; 

      }); 
      } 
     } 
     }}); 

    return user; 

} 

在我的资源,我有这个

models.users.findById(req.params.id).then(function(results) { 
     if(results) 
      console.log(models.users.morphTo(models, results.dataValues.model_id, results.dataValues.model)); 
     else 
      res.status(204).send(); 
    }); 

我的控制台正在运行但回报是“未定义”

Executing (default): SELECT `id`, `crm` FROM `medics` AS `medics` WHERE `medics`.`id` = 1 

我忘了什么?

回答

0

我认为你必须与你的诺言了一个问题:

console.log(models.users.morphTo(models, results.dataValues.model_id, results.dataValues.model)); 

这是一个异步调用。你不应该期望答案马上,你应该期待一个承诺。

试试这个:

models.users.findById(req.params.id).then(function(results) { 
    if(results) { 
     models.users.morphTo(models, results.dataValues.model_id, results.dataValues.model).then(function(result) { 
      console.log('This is your result:', result);     
     }); 
    } else { 
     res.status(204).send(); 
    } 
}); 

而且您可以简化模型声明:

morphTo: function(models, model_id, model){ 
    if(model == 'medics'){ 
     return models.medics.findById(model_id); 
    }else if(model == 'employees'){ 
     return models.employees.findById(model_id); 
    } 
}