Sequelize を使用して単純な Node/Express アプリを構築しようとしていますが、リレーショナル データベースに新しいレコードを作成しようとすると、エラーが発生しますUnhandled rejection SequelizeDatabaseError: SQLITE_ERROR: no such table: main.User
。基本的に、Users
テーブルにユーザーを作成してから、テーブルに関連するアドレスを作成しようとしAddresses
ます-ユーザーは正常に作成されますが、アドレスの作成時にこのエラーで失敗します...main
テーブル名のどこからプレフィックスを取得していますか? (以下の完全なエラー読み出し)...
まず、私のプログラムの概要は次のとおりです...
Sequelize のバージョンは
Sequelize [Node: 6.8.1, CLI: 2.4.0, ORM: 3.29.0]
で、Sequelize CLI コマンドを使用しsequelize init
てプロジェクトのこの部分をセットアップしました。私はローカル開発にSQLite3を使用し
config/config.json
ており、開発データベースを次のように定義しています"development": { "storage": "dev.sqlite", "dialect": "sqlite" }
私のユーザー移行:
'use strict'; module.exports = { up: function(queryInterface, Sequelize) { return queryInterface.createTable('Users', { id: { allowNull: false, autoIncrement: true, primaryKey: true, type: Sequelize.INTEGER }, first_name: { type: Sequelize.STRING }, last_name: { type: Sequelize.STRING }, createdAt: { allowNull: false, type: Sequelize.DATE }, updatedAt: { allowNull: false, type: Sequelize.DATE } }); }, down: function(queryInterface, Sequelize) { return queryInterface.dropTable('Users'); } };
およびアドレスの移行 (省略):
module.exports = { up: function(queryInterface, Sequelize) { return queryInterface.createTable('Addresses', { id: { allowNull: false, autoIncrement: true, primaryKey: true, type: Sequelize.INTEGER }, address_line_one: { type: Sequelize.STRING }, UserId: { type: Sequelize.INTEGER, allowNull: false, references: { model: "User", key: "id" } } }) }
ユーザーモデル:
'use strict'; module.exports = function(sequelize, DataTypes) { var User = sequelize.define('User', { first_name: DataTypes.STRING, last_name: DataTypes.STRING }, { classMethods: { associate: function(models) { models.User.hasOne(models.Address); } } }); return User; };
および住所モデル:
'use strict'; module.exports = function(sequelize, DataTypes) { var Address = sequelize.define('Address', { address_line_one: DataTypes.STRING, UserId: DataTypes.INTEGER }, { classMethods: { associate: function(models) { models.Address.hasOne(models.Geometry); models.Address.belongsTo(models.User, { onDelete: "CASCADE", foreignKey: { allowNull: false } }); } } }); return Address; };
最後に、私のルート
index.js
:router.post('/createUser', function(req, res){ var firstName = req.body.first_name; var lastName = req.body.last_name; var addressLineOne = req.body.address_line_one; models.User.create({ 'first_name': newUser.firstName, 'last_name': newUser.lastName }).then(function(user){ return user.createAddress({ 'address_line_one': newUser.addressLineOne }) })
そのため、に投稿しようとする/createUser
と、ユーザーは正常に作成され、コンソールには新しいアドレスが作成されたINSERT INTO 'Addresses'...
と表示されますが ( )、アドレスは作成されず、次のエラーがログに記録されます。
Unhandled rejection SequelizeDatabaseError: SQLITE_ERROR: no such table: main.User
at Query.formatError (/Users/darrenklein/Desktop/Darren/NYCDA/WDI/projects/world_table/wt_test_app_1/node_modules/sequelize/lib/dialects/sqlite/query.js:348:14)
at afterExecute (/Users/darrenklein/Desktop/Darren/NYCDA/WDI/projects/world_table/wt_test_app_1/node_modules/sequelize/lib/dialects/sqlite/query.js:112:29)
at Statement.errBack (/Users/darrenklein/Desktop/Darren/NYCDA/WDI/projects/world_table/wt_test_app_1/node_modules/sqlite3/lib/sqlite3.js:16:21)
数か月前に Sequelize でこの種のことを行ったことがあり、成功しました。ここで何が欠けているのか、一生わかりません。アプリが を探しているのはなぜmain.User
ですか? 正しいテーブルを探すにはどうすればよいですか? ありがとうございました!