【问题标题】:Sequelize v6.2.0: include.model.getTableName is not functionSequelize v6.2.0:include.model.getTableName 不起作用
【发布时间】:2021-05-03 18:18:02
【问题描述】:

目前,我正在使用带有 node.js 的 sequelize v6.2.0 来创建 rest api。

我想使用scopesprofile 数据添加到user,如下所示。

不幸的是,它导致include.model.getTableName is not function 错误。

(models/user.js)

'use strict';
const {
  Model,
} = require('sequelize');
const Profile = require('./profile');

module.exports = (sequelize, DataTypes) => {
  class User extends Model {
    static associate(models) {
      // define association here
      User.hasOne(models.Profile, {
        foreignKey: 'userId',
        as: 'profile',
      });
    }
  };
  User.init({
    username: {
      type: DataTypes.STRING,
      allowNull: true,
    },
    email: {
      type: DataTypes.STRING,
      allowNull: false,
    },
    password: {
      type: DataTypes.STRING,
      allowNull: true,
    },
    isVerified: {
      type: DataTypes.BOOLEAN,
      allowNull: false,
      defaultValue: false,
    },
    isAdmin: {
      type: DataTypes.BOOLEAN,
      allowNull: false,
      defaultValue: false,
    },
    isDeleted: {
      type: DataTypes.BOOLEAN,
      allowNull: false,
      defaultValue: false,
    },
    token: {
      type: DataTypes.STRING,
      allowNull: false,
    },
  }, {
    scopes: {
      withProfile: () => ({
        include: [
          {
            as: 'profile',
            model: Profile,
          },
        ],
      }),
    },
    sequelize,
    modelName: 'User',
  });

  return User;
};

(models/profile.js)

'use strict';
const {
  Model,
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
  class Profile extends Model {
    static associate(models) {
      Profile.belongsTo(models.User, {
        foreignKey: 'userId',
        as: 'user',
      });
    }
  };
  Profile.init({
    userId: {
      type: DataTypes.INTEGER,
      allowNull: false,
    },
    firstName: {
      type: DataTypes.STRING,
      allowNull: false,
    },
    lastName: {
      type: DataTypes.STRING,
      allowNull: false,
    },
    birthday: {
      type: DataTypes.DATE,
      allowNull: true,
    },
    location: {
      type: DataTypes.STRING,
      allowNull: true,
    },
    gender: {
      type: DataTypes.STRING,
      allowNull: false,
    },
    phone: {
      type: DataTypes.STRING,
      allowNull: true,
    },
  }, {
    sequelize,
    modelName: 'Profile',
  });
  return Profile;
};

(controllers/auth.controller.js)

const me = (req, res) => {
  const scopes = ['withProfile'];

  try {
    // This is making error....
    models.User.scope(scopes).findOne({
      where: {
        id: req.user.id,
      },
      attributes: {
        exclude: ['password', 'token'],
      },
    }).then((result) => {
      return res.status(200).json({
        data: result.dataValues,
      });
    }).catch((error) => {
      return res.status(500).json({
        message: error.message,
      });
    });
  } catch (error) {
    return res.status(500).json({
      message: error.message,
    });
  }
};

我该如何解决这个问题?

【问题讨论】:

    标签: node.js sequelize.js sequelize-cli scopes


    【解决方案1】:

    问题是:

    (models/user.js)

    include: [
      {
         as: 'profile',
         model: sequelize.model('Profile'),
      },
    ]
    

    希望对大家有所帮助。

    【讨论】:

      猜你喜欢
      • 2016-04-08
      • 1970-01-01
      • 2020-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-27
      • 2018-04-27
      • 2016-09-04
      相关资源
      最近更新 更多