gpt4 book ai didi

node.js - 使用 Node JS + Sequelize JS 时出错

转载 作者:太空宇宙 更新时间:2023-11-04 02:27:41 25 4
gpt4 key购买 nike

我在使用 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;
};

以及当前模型的 dao :

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;

最佳答案

嗯,您的问题中有几个问题。此外,在某些方面,您使用sequelize的方式也不是设计师所期望的方式。

1) 创建表

正如@cgc提到的,#sync()是一个初始化调用。将其视为大爆炸。您一开始只调用一次,然后将其删除。

2) EventEmitter#success|ok 已弃用,请使用 Promise 样式。

请引用我的 stackoverflow 答案:Sequelize associations - please use promise-style instead

您不应该再使用#success() 和#error() 处理程序。然而,BC 仍保留在它们之上。话又说回来,我并不完全确定测试将在多大程度上覆盖它们,并且您可能会遇到错误。

3) 您可以通过返回 Promises 来简化代码。

您正在编写的流程可能会给您带来麻烦。您有多种不同的方法来处理错误。

改为订阅简单的 promise 流程。所有的sequelize实例及其方法都将返回promise。这些 Promise 可以返回到父 Promise 链,这样您就可以只有 1 个“成功”和“错误”处理程序。并且您始终可以使用 throw 将错误传递到您的第一个且唯一的错误处理函数中。

重写 #delete() 方法的示例:

  delete: function (id, callback) {
// returns this parent promise to its caller
return this.context.ArticleCategory.find(id).then(function (category) {
if (!category) throw 'Aucune catégorie avec l\'id :' + id;

// returns category promise back to its parent promise
return category.destroy().then(callback);
})
// all errors within this parent promise scope will bubble up this this one catch handler.
.catch(callback);
}

附加。

随后,您的 #update() 方法也可以重写为:

update: function (properties, callback) {
return this.context.find(properties.id).then(function(category) {
if(!category) throw 'Aucune catégorie avec l\'id :' + properties.id';

//don't need the id attribute. optional, but i feel deleting it is better.
delete properties.id
return category
.updateAttributes(properties)
.then(function(category) {
callback(null, category);
});

}).catch(callback);
}

关于node.js - 使用 Node JS + Sequelize JS 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29281789/

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