Javascript sequelize模型自定义方法返回未定义

Javascript sequelize模型自定义方法返回未定义,javascript,methods,model,undefined,sequelize.js,Javascript,Methods,Model,Undefined,Sequelize.js,在我的应用程序中,我有一个用户,一些用户是医生,一些是牙医,一些是营养师,当我开始使用时,我想发送一个json,其中包含用户和用户数据,这些数据基于两列用户(model_id和model),我尝试使用名为morpto的自定义方法进行查找,所以我有一个名为users的模型 module.exports = function(sequelize, DataTypes) { var user = sequelize.define('users', { email: {type: Sequeli

在我的应用程序中,我有一个用户,一些用户是医生,一些是牙医,一些是营养师,当我开始使用时,我想发送一个json,其中包含用户和用户数据,这些数据基于两列用户(model_id和model),我尝试使用名为morpto的自定义方法进行查找,所以我有一个名为users的模型

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();
    });
我的控制台正在运行查询,但返回“未定义”


我忘了什么?

我想你的承诺有问题:

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

我认为你的承诺有问题:

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