2016-04-26 6 views
1

auf meiner App Ich habe Benutzer und einige Benutzer sind Ärzte, einige sind Zahnarzt, einige sind Ernährungswissenschaftler, wenn ich meine Verwendung Ich möchte ein JSON zurück mit Benutzer und Benutzerdaten senden, diese Daten sind basiert auf zwei Säulen Benutzer (MODEL_ID und Modell), im doind es mit der benutzerdefinierten Methode versucht, genannt morphTo, soo habe ich das Modell namens BenutzerFortsetzung Modell benutzerdefinierte Methode zurück 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; 

} 

auf meiner Ressource ich habe dieses

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

Meine Konsole läuft die qu er aber die Rückkehr ist "undefined"

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

was habe ich vergessen?

Antwort

0

Ich glaube, Sie ein Problem mit Ihrem Versprechen haben:

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

Dies ist ein asynchroner Aufruf. Sie sollten die Antwort nicht sofort erwarten, Sie sollten ein Versprechen erwarten.

Versuchen Sie folgendes:

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

Und Sie können Ihr Modell Erklärung vereinfachen:

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