Sequelizeで単純なNode/Expressアプリケーションを作成しようとしていますが、リレーショナルデータベースに新しいレコードを作成しようとすると、エラーUnhandled rejection SequelizeDatabaseError: SQLITE_ERROR: no such table: main.User
が表示されます。基本的には、Users
テーブルにユーザーを作成してから、Addresses
テーブルに関連するアドレスを作成しようとしました - ユーザーは作成されましたが、アドレスの作成時にこのエラーで失敗します... main
テーブル名? (下の完全なエラー読み出し)...ノード/エクスプレスでSequelize - 'no such table:main.User`エラー
まず第一には、ここに
マイSequelizeのバージョンが
Sequelize [Node: 6.8.1, CLI: 2.4.0, ORM: 3.29.0]
です...私のプログラムの荒廃だ、と私はこれを設定するSequelize CLIコマンドsequelize init
を使用しました私のプロジェクトの一部です- 私は地元の発展のためにSQLite3を使用しています
、および
"development": { "storage": "dev.sqlite", "dialect": "sqlite" }
- として定義dbの
config/config.json
に私が開発を持っている私のユーザー移行:'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
に投稿してみてください、ユーザーは正常に作成され、コンソールにはtと表示されます帽子新住所は(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
を探しているのはなぜですか?また、正しい表を探すにはどうすればよいですか?ありがとうございました!
複数化について心配したくない場合は、テーブルに 'freezeTableName:true'というオプションを追加することができます –
@ R.Gulbrandsenそれは最高です! – skwidbreth