Вам необходимо определить все столбцы, которые вы переносите в свою модель. Когда вы вводите allowNull: false
, базе данных нужна информация о столбце.
Я считаю, что вы можете решить добавление столбцов, которые вы объявили на своем migration
, внутри своего Model
, и, если вы не хотите объявлять эти столбцы на своем Controller
, добавьте defaultValue
свойство в этих столбцах.
Это позволит продолжить вставку соответствующих данных в эти столбцы. Например: defaultValue: Sequelize.NOW
в столбце created_at
.
Еще одна вещь, которую вам нужно указать, - это имя таблицы, как это (это одна модель, которую я использую в одном из моих проектов:
static init(sequelize) {
super.init(
{
categoryId: {
type: Sequelize.INTEGER,
primaryKey: true,
field: 'id',
},
dateUpdated: {
type: Sequelize.DATE,
field: 'updated_at',
defaultValue: Sequelize.NOW,
},
// ... other fields here,
},
{
sequelize,
tableName: 'categories',
}
);
}
// ...
}
export default Category;
И, следовательно, попробуйте импортировать как экземпляр, а не как класс.
EDIT 1: Другое. Ошибка в вашем ответ находится в строке 140 файла lib/model.js
( см. здесь, в github, о главном репозитории sequelize ).
Глядя на это, попробуйте объявить свой первичный ключ в модели, если вы еще не сделал.
РЕДАКТИРОВАТЬ 2: В вашем контроллере попробуйте это ( в соответствии с документами ):
await Post.create({ title, content });
Попробуйте передать объект json с информацией, которую вы хотите сохранить, а не в качестве параметров.
EDIT 3: Вам необходимо импортировать database.js
перед вызовом контроллеров у меня были проблемы в этом месте (следуйте database.js
, который работает):
// Imports here
import Category from '../app/models/Category';
//...
const models = [
// Models that I want to use
Category,
//...
];
class Database {
constructor() {
this.init();
}
// Load on database init
init() {
this.connection = new Sequelize(databaseConfig);
models.forEach(model => model.init(this.connection));
}
}
export default new Database();