有人知道如何解决这个问题吗?有一些我没有看到的东西。为了看看控制器是否工作,我返回了JSON中的响应,它工作了,没有错误。
问题似乎出在控制器上,但控制器...
编辑
控制器
import Post from '../models/Post';
import * as Yup from 'yup';
class PostController {
async store(req, res) {
try {
//Checks if the fields have been filled correctly
const schema = Yup.object().shape({
title: Yup.string()
.required(),
content: Yup.string()
.required()
});
if(!(await schema.isValid(req.body))) {
return res.status(400).json({ error: 'Error 1' });
}
//Abstraction of fields
const { title, content } = req.body;
const createPost = await Post.create(title, content);
if(!createPost) {
return res.json({error: 'Error 2'})
}
//If everything is correct, the information will be registered and returned.
return res.json({
title,
content,
});
}
catch (err) {
console.log("Error: " + err);
return res.status(400).json({error: 'Error 3'});
}
}
}
export default new PostController();
字符串
型号:
import Sequelize, { Model } from 'sequelize';
class Post extends Model {
static init(sequelize) {
//Fields registered by the user
super.init({
id: {
type: Sequelize.INTEGER,
primaryKey: true
},
title: Sequelize.STRING,
content: Sequelize.TEXT,
created_at: {
type: Sequelize.DATE,
defaultValue: Sequelize.NOW,
},
updated_at: {
type: Sequelize.DATE,
defaultValue: Sequelize.NOW,
},
},
{
sequelize,
tableName: 'posts'
});
return this;
}
}
export default Post;
型
迁移:
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('posts', {
id: {
type: Sequelize.INTEGER,
allowNull: false,
autoIncrement: true,
primaryKey: true
},
title: {
type: Sequelize.STRING,
allowNull: false,
},
content: {
type: Sequelize.TEXT,
allowNull: false,
},
created_at: {
type: Sequelize.DATE,
allowNull: false,
},
updated_at: {
type: Sequelize.DATE,
allowNull: false,
}
});
},
down: (queryInterface) => {
return queryInterface.dropTable('posts');
}
};
型
终端错误:
TypeError: Cannot read property 'length' of undefined
型
4条答案
按热度按时间disbfnqx1#
你需要定义你在模型中迁移的所有列。当你放置
allowNull: false
时,数据库需要列信息。我相信你可以解决将你在
migration
上声明的列添加到Model
中的问题,如果你不想在Controller
上声明这些列,可以在这些列上添加defaultValue
属性。这将允许sequelize在这些列上插入适当的数据。例如:
created_at
列上的defaultValue: Sequelize.NOW
。另一件需要输入的事情是表名,像这样(这是我在一个项目中使用的一个模型:
字符串
因此,请尝试作为示例导入,而不是作为类导入。
lib/model.js
的第140行(请参阅github上sequelize的主存储库)。看看这个,如果你还没有在模型上声明主键的话,试着在模型上声明主键。
型
尝试传递一个json对象,其中包含您想要存储的信息,而不是作为参数。
database.js
,我在这一点上有问题(按照database.js
工作):型
pxq42qpu2#
我有同样的问题,鸣人涡卷。我忘了把连接的模型上的文件,初始化模型。
6tr1vspr3#
我也有同样的问题
我的代码的问题是,我忘记将模块名添加到models数组中的数据库的index.js文件中
例如:
const **models** = [User,**Task**]
我在这篇文章中找到了答案:https://github.com/sequelize/sequelize/issues/11111#issuecomment-697078832
n8ghc7c14#
在我的情况下,我在我的架构中的ENUM语法错误。当我纠正语法时,问题解决了。