【发布时间】:2020-07-12 10:22:08
【问题描述】:
我正在学习使用 Express、Nodejs、Sequelize、Postgres 构建应用程序的教程。 创建我的控制器和路由后,GET 路由完美运行,但 POST 路由(意味着调用回调函数来创建对象)失败:
TypeError:无法读取未定义的属性“创建”。
这是控制器:
let Todo = require('../models').todo;
module.exports = {
create(req, res){
return Todo
.create({title:req.body.title,})
.then(todo => res.status(201).send(todo))
.catch(error => res.status(400).send(error));
},
list(req, res){
return Todo
.all()
.then(todos => res.status(200).send(todos))
.catch(error => res.status(400).send(error));
},
};
这是路由定义
const todosController = require('../controllers').todos;
module.exports = app => {
app.get('/api', (req, res) =>res.status(200).send({message:"welcome to the todos API!"}));
app.post('/api/todos', todosController.create);
app.get('/api/todos', todosController.list);
};
...这里是 todo 模型。谢谢@Yuri Tarabanko
'use strict';
module.exports = (sequelize, DataTypes) =>{
const Todo = sequelize.define('Todo', {
title:{
type:DataTypes.STRING,
allowNull: false
},
},
{
classMethods: {
associate: (models) => {
Todo.hasMany(models.TodoItem,
{
foreignKey:'todoId',
as: 'todoItems',
});
},
},
}
);
return Todo;
};
我的controllers/index.js 文件如下所示。
const todos = require('./todos');
module.exports = {
todos,
};
【问题讨论】:
-
请添加
models和controllers文件。似乎问题在于您重新导出Todo或todoContoller的方式 -
我现在才这样做。谢谢@YuryTarabanko
-
您将
todo模型导出为工厂函数。您是否还可以在调用此工厂的位置添加代码以创建Todo模型。models/index.js我猜。