【发布时间】:2015-03-26 15:00:00
【问题描述】:
我在使用 SequelizeJS 和 NodeJS 时遇到问题。
我执行npm bin/www 命令时的错误信息:
EventEmitter#success|ok is deprecated, please use promise-style instead.
Executing (default): CREATE TABLE IF NOT EXISTS `ArticleCategories` (`id` INTEGER NOT NULL auto_increment , `name` VARCHAR(255), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;
Executing (default): SHOW INDEX FROM `ArticleCategories`
我不明白为什么会执行 CREATE TABLE,因为我的桌子已经就位...
我的模特:
module.exports = function (db, Types) {
var ArticleCategory = db.define('ArticleCategory', {
name: {
type: Types.STRING
},
}, {
classMethods:{
associate: function (models) {
ArticleCategory.hasMany(models.Article);
}
}
});
return ArticleCategory;
};
以及当前模型的道:
var dbContext = require('./../../db/DbContext');
var _ = require('lodash');
var ArticleCategoryDao = function () {
this.context = dbContext.entities;
};
_.extend(ArticleCategoryDao.prototype, {
getAll: function (callback) {
return this.context.ArticleCategory.findAll({include: [{ model: this.context.Article}]});
},
get: function (id, callback) {
return this.context.ArticleCategory.find(id);
},
save: function(properties, callback){
this.context.ArticleCategory.create(properties)
.success(function (category) {
callback(null, category);
})
.error(function (error) {
callback(error, null);
});
},
update: function (properties, callback) {
this.get(properties.id).success(function (category) {
if(category){
category.updateAttributes(properties).success(function (category) {
callback(null, category);
}).error(function (error) {
callback(error, category);
});
}else{
callback('Aucune catégorie avec l\'id :' + properties.id, null);
}
});
},
delete: function (id, callback) {
this.context.ArticleCategory.find(id).success(function (category) {
if(category){
category.destroy().success(callback);
}
else{
callback('Aucune catégorie avec l\'id :' + id);
}
})
.error(callback);
}
});
module.exports = ArticleCategoryDao;
【问题讨论】:
-
检查您是否在代码中的某处调用
sync()。 -
是的,我在
DbContext...中调用了sync()... -
那是你的问题。 :) 当您致电
sync()时,Sequelize 将尝试将您的数据库与您在 Sequelize 模型中的定义同步(惊喜!)。我不确切知道sync() 的所有后果,但是删除它,您可能会注意到CREATE TABLE 语句不再存在。 -
好的,我删除了
sync()函数,但是如果我删除所有表,我的脚本会重新创建所有表吗? -
不。如果您删除
sync(),则 Sequelize 将不会尝试再次创建您的表。
标签: node.js sequelize.js