Sequelize 批量同步什么都不做

Sequelize bulk synchronization does nothing

我无法让 sequelize.sync() 工作。在每个模型定义上调用 sync() 都可以完美运行,但从 sequelize 实例调用它似乎无济于事,就像模型管理器中没有注册模型一样。

考虑以下因素:

function syncAll() {
    console.log('Retrieving exported models...')
    let models = require('./models')
    for(var modelName in models) {
        let model = models[modelName]
        // define() just wraps a regular sequelize.define() call
        // model.define().sync() works!
        model.define()
    }

    console.log('All exported models have been defined! Syncing database...')
    sequelize.sync({
        logging: true
    }).then(function() {
        // The operation completes but no command is executed in the DB
        console.log('Database synchronization complete!')
    }).catch(function(error) {
        console.log("Database synchronization error:\n\t${error}")
    })
}

只是想了解我遗漏了什么,为什么批量同步对我不起作用?

AFAIK 我只需要在调用 sequelize.sync() 之前定义所有模型,对吗?!

编辑 1

关于我的环境的一些信息:我在 debian 下使用 node 5.6 和 postgres

编辑 2

找到问题了。请参阅已接受答案的结尾...

sequelize example 中的这段代码对我来说很好用:

var sequelize = new Sequelize(config.database, config.username, config.password, config);
var db: any = {};

var Task = sequelize.define("Task", {
  title: Sequelize.STRING
}, {
  classMethods: {
    associate: function(models) {
      Task.belongsTo(models.User, {
        onDelete: "CASCADE",
        foreignKey: {
          allowNull: false
        }
      });
    }
  }
});

var User = sequelize.define("User", {
  username: Sequelize.STRING
}, {
  classMethods: {
    associate: function(models) {
      User.hasMany(models.Task);
    }
  }
});

db.User = User;
db.Task = Task;

Object.keys(db).forEach(function(modelName) {
  if ("associate" in db[modelName]) {
    db[modelName].associate(db);
  }
});

sequelize.sync().then(() => {
  // some code here
});

已通过 "sequelize.define(...)" 定义模型,然后调用 "sequelize.sync()"。

更新 1

我正在使用 sqlite:

var config: any = {
    "dialect": "sqlite",
    "storage": "./db.development.sqlite"
};

从 OP 更新

我发现了这段代码与我的代码之间的唯一区别。由于我的逻辑中的错误 sequelize.define()sequelize.sync() 从不同的 sequelize 实例(即不同的连接)调用并且每个连接都有自己的 modelManager 所以显然没有模型可以同步第二个连接对象。