私はExpress、Nodejs、Sequelize、Postgresでアプリケーションを構築するチュートリアルに従っています。 は私のコントローラとルートを作成した後、GETルートは完璧に動作しますが、POSTルートは(オブジェクトを作成するためのコールバック関数を呼び出すことを意味する)で失敗します。未定義の「作成」プロパティを読み取ることができません
TypeError: cannot read property 'create' of undefined.
これはコントローラです:
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,
};
'モデル'と 'controllers'ファイルを追加します。問題は、あなたが 'Todo'または' todoContoller'のどちらかを再エクスポートする方法であるようです。 –
私はちょうどそれをしました。ありがとう@YuryTarabanko –
'todo'モデルをファクトリ関数としてエクスポートします。このファクトリを呼び出す場所にコードを追加して 'Todo'モデルを作成することもできますか? 'models/index.js'だと思います。 –