Sequelize v6.2.0:include.model.getTableName 不是函数

问题描述

目前,我使用 sequelize v6.2.0 和 node.js 来创建 rest api。

我想使用如下所示的 profileuser 数据添加scopes

不幸的是,它出现了 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,isverified: {
      type: DataTypes.BOOLEAN,defaultValue: false,isAdmin: {
      type: DataTypes.BOOLEAN,isDeleted: {
      type: DataTypes.BOOLEAN,token: {
      type: DataTypes.STRING,{
    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,as: 'user',});
    }
  };
  Profile.init({
    userId: {
      type: DataTypes.INTEGER,firstName: {
      type: DataTypes.STRING,lastName: {
      type: DataTypes.STRING,birthday: {
      type: DataTypes.DATE,location: {
      type: DataTypes.STRING,gender: {
      type: DataTypes.STRING,phone: {
      type: DataTypes.STRING,{
    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,});
  }
};

我该如何解决这个问题?

解决方法

问题在于:

(models/user.js)

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

希望对大家有所帮助。