9

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ですか? 正しいテーブルを探すにはどうすればよいですか? ありがとうございました!

4

1 に答える 1