gpt4 book ai didi

node.js - 在 Node/Express 中进行 Sequelize - 'no such table: main.User` 错误

转载 作者:IT王子 更新时间:2023-10-29 06:28:23 31 4
gpt4 key购买 nike

我正在尝试使用 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'... ),但未创建地址并记录了以下错误:

未处理的拒绝 SequelizeDatabaseError:SQLITE_ERROR:没有这样的表:main.User
在 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)
在执行后(/Users/darrenklein/Desktop/Darren/NYCDA/WDI/projects/world_table/wt_test_app_1/node_modules/sequelize/lib/dialects/sqlite/query.js:112:29)
在 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,我怎样才能让它查找正确的表?谢谢!

最佳答案

啊哈!一个小错误使我的整个操作脱轨。在迁移文件中,references.model 必须复数!

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

繁荣。

关于node.js - 在 Node/Express 中进行 Sequelize - 'no such table: main.User` 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41556888/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com