2016-04-26 2 views
1

на моем приложении у меня есть пользователь, а некоторые пользователи - медики, некоторые из них - стоматолог, некоторые - диетолог, когда я получаю свое применение, я хочу отправить json обратно с пользовательскими и пользовательскими данными, эти данные на основе двух столбцов пользователя (model_id и модели), им пытаются doind него с пользовательский метод называется morphTo, Су я модель называется пользователиsequelize model custom method return 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(); 
    }); 

Моя консоль запускает qu но возвращение «не определено»

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); 
    } 
}