ExpressJS + Sequelize er_bad_field_error:字段列表中的未知列

时间:2015-11-12 02:49:57

标签: 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: 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'

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

2 个答案:

答案 0 :(得分:3)

由于旧表中存在一行,因此sequelize / SQL可能会混淆。您是否已经尝试删除数据库中的任何现有表格?正如已经说过的那样,同步数据库很重要,但也要将“force”设置为true,以便您擦除旧表(只有这样,如果您的数据库不在生产中!)。它位于文档中:http://docs.sequelizejs.com/en/1.7.0/articles/getting-started/

它对我有用。

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

答案 1 :(得分:0)

添加sync({ force: true })会重新创建表,同时删除所有条目(如果您正在生产数据库)。您可以尝试使用相同的选项,但可以使用sync({ alter: true })选项。它将尝试更新新值或删除旧值,而不会造成太大损害。我会先在开发人员模式下尝试一下,然后再投入生产。