2017-01-09 33 views
3

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を探しているのはなぜですか?また、正しい表を探すにはどうすればよいですか?ありがとうございました!

答えて

2

Aha!小さなエラーが私の操作全体を脱線させました。移行ファイルでは、references.modelを複数形にする必要があります。

references: { 
    model: "Users", 
    key: "id" 
} 

ブーム。

+2

複数化について心配したくない場合は、テーブルに 'freezeTableName:true'というオプションを追加することができます –

+2

@ R.Gulbrandsenそれは最高です! – skwidbreth

関連する問題