я работаю над nodejs проектом с docker и продолжением, получаю ошибку: не могу прочитать свойство toString из undefined - PullRequest
0 голосов
/ 27 апреля 2020

вот мой скриншот моего исключения:

this is my stacktrace

ниже мои модели:

module.exports.up = (queryInterface, DataTypes) => {
return queryInterface.createTable('users', {
    id: {
        allowNull: false,
        type: DataTypes.UUID
    },
    email: {
        allowNull: false,
        type: Sequelize.STRING,
        unique: true
    },
    passwordHash: {
        allowNull: false,
        type: DataTypes.CHAR(64)
    },
    createdAt: {
        allowNull: false,
        type: DataTypes.DATE
    },
    updatedAt: {
        allowNull: false,
        type: DataTypes.DATE
    },
    deletedAt: {
        allowNull: true,
        type: DataTypes.DATE
    }
}, {
    charset:"utf8"
} 
); 

};

module.exports.down = queryInterface => queryInterface.dropTable ("users");

module.exports.up = (queryInterface, DataTypes) => {
return queryInterface.createTable('userSession', {
    id: {
        allowNull: false,
        type: DataTypes.UUID
    },           

    userId: {
        references: "id",
        model:"users"
    },

    passwordHash: {
        allowNull: false,
        type: DataTypes.CHAR(64)
    },
    createdAt: {
        allowNull: false,
        type: DataTypes.DATE
    },
    updatedAt: {
        allowNull: false,
        type: DataTypes.DATE
    },
    deletedAt: {
        allowNull: true,
        type: DataTypes.DATE
    }
}, {
    charset:"utf8"
} 
); 

};

module.exports.down = queryInterface => queryInterface. dropTable ("userSession");

Не могу понять, что не так, заранее спасибо

1 Ответ

0 голосов
/ 27 апреля 2020

Проблема со следующими частями миграций:

  1. Секвелизация здесь не определена. Измените его на DataTypes.
    email: {
        allowNull: false,
        type: Sequelize.STRING,
        unique: true
    },
Ссылка не определена правильно в таблице userSession. Это должно быть определено так:
      userId: {
          type: DataTypes.UUID,
          references: {
            model: 'users',
            key: 'id',
          },
      },
И последнее, но не менее важное: поле id таблицы users должно быть определено как первичный ключ. В противном случае вы не сможете назначить его в качестве внешнего ключа в таблице userSession. Следовательно, в таблицу пользователей добавьте свойство primaryKey: true.
      id: {
          primaryKey: true,
          allowNull: false,
          type: DataTypes.UUID
      },

Чтобы в конце сценарии миграции выглядели так:

Для таблицы пользователей:

module.exports.up = (queryInterface, DataTypes) => {
  return queryInterface.createTable('users', {
      id: {
          primaryKey: true,
          allowNull: false,
          type: DataTypes.UUID
      },
      email: {
          allowNull: false,
          type: DataTypes.STRING,
          unique: true
      },
      passwordHash: {
          allowNull: false,
          type: DataTypes.CHAR(64)
      },
      createdAt: {
          allowNull: false,
          type: DataTypes.DATE
      },
      updatedAt: {
          allowNull: false,
          type: DataTypes.DATE
      },
      deletedAt: {
          allowNull: true,
          type: DataTypes.DATE
      }
  }, {
      charset:"utf8"
  }
  );
};

module.exports.down = queryInterface => queryInterface.dropTable("users");

Для таблицы userSession:

module.exports.up = (queryInterface, DataTypes) => {
  return queryInterface.createTable('userSession', {
      id: {
          allowNull: false,
          type: DataTypes.UUID
      },
      userId: {
          type: DataTypes.UUID,
          references: {
            model: 'users',
            key: 'id',
          },
      },
      passwordHash: {
          allowNull: false,
          type: DataTypes.CHAR(64)
      },
      createdAt: {
          allowNull: false,
          type: DataTypes.DATE
      },
      updatedAt: {
          allowNull: false,
          type: DataTypes.DATE
      },
      deletedAt: {
          allowNull: true,
          type: DataTypes.DATE
      }
  }, {
      charset:"utf8"
  }
  );
};

module.exports.down = queryInterface => queryInterface.dropTable("userSession");

PS: удалить старые таблицы вместе с SequelizeMeta в вашей базе данных, а затем запустить миграцию.

...