Node.js ExpressJS+;Sequelize er_bad_field_错误:fieldlist中的未知列

Node.js ExpressJS+;Sequelize er_bad_field_错误:fieldlist中的未知列,node.js,express,database-schema,sequelize.js,Node.js,Express,Database Schema,Sequelize.js,将以下模型文件与Sequelize结合使用,此代码运行时不会出错,并允许我执行插入: var crypto = require('crypto'); module.exports = function(sequelize, DataTypes) { var User = sequelize.define('User', { title: DataTypes.STRING, name: DataTypes.STRING, email:

将以下模型文件与Sequelize结合使用,此代码运行时不会出错,并允许我执行插入:

var crypto = require('crypto');

module.exports = function(sequelize, DataTypes) {

var User = sequelize.define('User', 
    {
        title: DataTypes.STRING,
        name: DataTypes.STRING,
        email: DataTypes.STRING,
        username: DataTypes.STRING,
        hashedPassword: DataTypes.STRING,
        provider: DataTypes.STRING,
        salt: DataTypes.STRING, 
        facebookUserId: DataTypes.INTEGER,
        twitterUserId: DataTypes.INTEGER,
        twitterKey: DataTypes.STRING,
        twitterSecret: DataTypes.STRING,
        github: DataTypes.STRING,
        openID: DataTypes.STRING
    },
...
)
但是,当我尝试手动添加自己感兴趣的字段时,即添加邮政编码字段,如下所示:

module.exports = function(sequelize, DataTypes) {

var User = sequelize.define('User', 
    {
        title: DataTypes.STRING,
        name: DataTypes.STRING,
        email: DataTypes.STRING,
        username: DataTypes.STRING,
        hashedPassword: DataTypes.STRING,
        provider: DataTypes.STRING,
        salt: DataTypes.STRING, 
        facebookUserId: DataTypes.INTEGER,
        twitterUserId: DataTypes.INTEGER,
        twitterKey: DataTypes.STRING,
        twitterSecret: DataTypes.STRING,
        github: DataTypes.STRING,
        openID: DataTypes.STRING,
        ZIP: DataTypes.INT
    },
以下错误会传播:

 SequelizeDatabaseError: ER_BAD_FIELD_ERROR: Unknown column 'title' in 'field list'

为什么不允许我在模型中添加字段,以便能够从控制器访问这些字段?

可能因为旧表中存在一行而导致sequelize/SQL混淆。如果已经创建了一些表,您是否尝试过删除数据库中的任何现有表?如前所述,同步数据库很重要,但也要将“force”设置为true,以便擦除旧表(仅当数据库不在生产环境中时才执行此操作!)。在文档中:

这对我有用

sequelize 
.sync({ force: true })
.then(function(err) {
    console.log('It worked!');
  }, function (err) { 
         console.log('An error occurred while creating the table:', err);
  });

添加
sync({force:true})
将重新创建该表,同时删除生产数据库中的所有条目。您可以尝试使用相同的选项,但使用alter选项
sync({alter:true})
。它将尝试更新新值或删除旧值,不会造成太大伤害。在投入生产之前,我会先在开发模式下进行尝试。

是否将模型与数据库同步,确保你正在这样做,关于你的ZIP字段没有数据类型INT,有整数,插入后模型与数据库同步,对吗?此外,我将ZIP类型更改为INTEGER,并传播了完全相同的错误。您必须同步模型架构,这将更改数据库中的表,因此,如果您可以检查表中是否有ZIP列,则一切正常。