Articles of sequelize.js

Sequelize给TypeError

所以我随便开发了一个简单的node.js应用程序,它在我的电脑上工作得很好。 我安装了heroku工具栏 ,当我开始工头时,应用程序运行良好。 在heroku中部署应用程序似乎给了我一些使用sequelize与postgres连接时的错误(我甚至不能100%确定这是错误的原因,但几乎)。 该应用程序崩溃,我拥有的是heroku日志: 2014-01-05T11:07:39.850661+00:00 app[web.1]: Servidor escuchando al puerto: 25144 2014-01-05T11:07:39.911641+00:00 app[web.1]: 2014-01-05T11:07:39.912039+00:00 app[web.1]: timers.js:103 2014-01-05T11:07:39.912288+00:00 app[web.1]: if (!process.listeners('uncaughtException').length) throw e; 2014-01-05T11:07:39.913123+00:00 app[web.1]: ^ 2014-01-05T11:07:39.915970+00:00 app[web.1]: at TransactionManager.getConnectorManager (/app/node_modules/sequelize/lib/transaction-manager.js:25:36) 2014-01-05T11:07:39.915970+00:00 app[web.1]: at TransactionManager.query (/app/node_modules/sequelize/lib/transaction-manager.js:39:15) 2014-01-05T11:07:39.915970+00:00 app[web.1]: at module.exports.Sequelize.query (/app/node_modules/sequelize/lib/sequelize.js:310:36) 2014-01-05T11:07:39.915970+00:00 app[web.1]: at null.<anonymous> (/app/node_modules/sequelize/lib/query-interface.js:901:40) 2014-01-05T11:07:39.915970+00:00 app[web.1]: TypeError: Cannot call method 'setTypeParser' of undefined […]

如何导入需要参数的模块

这是我的文件结构: -models -user.js -room.js -database.js -controllers -createRoom.js -routes.js .. user.js和room.js是我想要在database.js中导入的模块。 现在我正在做这样的事情: 在database.js中: var mysql = require('mysql'); var Sequelize = require('sequelize'); var db = new Sequelize('test', 'root', 'root', { dialect: "mysql", port: 3306 }) var User = require('./user.js')(Sequelize, db); var Room = require('./room.js')(Sequelize, db); module.exports = function(){ //code… }; 在user.js / room.js中 module.exports = function (Sequelize, […]

使用“限制”和“包含”选项时,Sequelize中的“未知列”错误

我有一个相对复杂的Sequelize查询,导致“错误:ER_BAD_FIELD_ERROR:”where子句“中的未知列”EventImage.EventId“。 我可以清楚地看到在生成的SQL中的问题,但我不知道如何解决它。 错误是准确的,因为在子查询中生成的WHERE子句引用了不包含在子查询中的列。 据我所知,Sequelize正在生成子查询作为实现行限制的一种方式。 我使用sequelize@2.0.0-dev11,MySQL 5.5.35-0ubuntu0.13.10.2和Node v0.10.21。 这是基本的代码: var orm = require('../model'); var i = orm.Image; i.findAll({ where: where, offset: offset, limit: rows, order: orderby, include: [{ model: orm.User, as: 'User' }, { model: orm.Event, as: 'Events' }, { model: orm.Comment, as: 'Comments' }, { model: orm.Favorite, as: 'Favorites' } ] }) (1,2)“中的”EventId“和”EventImage“ 偏移量= 0 […]

如何在node.js网站中组织模型?

我刚刚开始尝试使用node.js构build网站,并且在组织项目模型时遇到问题。 我在互联网上find的所有真实世界的例子都使用了Mongoose。 这个库允许你以静态的方式定义你的模型。 所以你可以写这个: // models/foo.js module.exports = require('mongoose').model('Foo', …); // app.js mongoose.connect(…); // some_controller_1.js var Foo = require('./models/foo'); Foo.find(…); // some_controller_2.js var Foo = require('./models/foo'); Foo.find(…); 但是由于我不想使用MongoDB,我需要另一个ORM。 而我发现的所有其他ORM都不允许这样做。 你首先需要创build一个实例,然后只有你可以注册你的模型。 他们似乎也不允许访问注册模型列表。 所以我试着这样做: // models/user.js var registrations = []; module.exports = function(sequelize) { var result = null; registrations.forEach(function(elem) { if (elem.db == sequelize) result = elem.value; […]

使用node.js批量删除mysql行

var Sequelize= require('sequelize') var sequelize = new Sequelize('db', 'user', 'password', {pool: { maxConnections: 5, maxIdleTime: 30 }}) var table = sequelize.define('User', { trip_paramid: Sequelize.INTEGER }, {timestamps:false}) table.sync({ force: false }).success(function() { table.destroy('`id` >= 5685321').success(function() { console.log("deleted"); }) table.destroy('`id` >= 9600000').success(function() { console.log("deleted"); }) table.destroy('`id` >= 15600000').success(function() { console.log("deleted"); }) table.destroy('`id` >= 20000000').success(function() { console.log("deleted"); }) […]

Sequalize:在加载关联时,一起使用order和limit

我有一个与主表中的主键对应的多个列的事务表。 基本上简单的一对一的关系。 我正在使用限制页面通过可能是一个万亿交易。 当使用顺序并加载findAll函数中的所有关系时,生成的查询将为LIMIT使用的FROM子句生成一个子查询。 另一方面,ORDER应用于外部查询。 这不提供所需的结果,因为订单不适用于整个数据集,而是应用于子查询返回的集合。 有没有办法,我可以申请的子查询顺序。 我正在使用Sequelize 1.7.9 db.Transaction.findAll({ order: '`transactions`.`some_date` DESC', limit: 10, offset: 10, include: [{ model: db.Master1, attributes:['name'], include: [{ model: db.Master2, attributes:['name'] }] }, { model: db.Master3, include: [{ model: db.Master4, attributes: ['name'] }] }, { model: db.Master5, attributes: ['name'], where: { id: '12345' } }] }) 生成表单的SQL SELECT `transactions`.*, […]

NodeJS Sequelize – 多个所有权

在我的应用程序中,我有用户和联系人。 用户向其他用户发送ContactRequest。 ContactRequest有一个请求者和被请求者字段。 我不知道如何去做这件事。 我不想要一个用户,ContactRequests和ContactRequestsUsers表(如果我在用户和联系人请求上定义了hasMany或hasOne,那么这个表就会是一个sequelize)。 那么让我们先来定义一些模型 – var User = sequelize.define('User', { id: {type: seq.INTEGER, primaryKey: true, autoIncrement: true}, username: { type: sequelize.STRING(32) } }); var ContactRequest = sequelize.define('ContactRequest', { id: {type: seq.INTEGER, primaryKey: true, autoIncrement: true} }); 不知道我应该做什么协会。 似乎我应该可以通过多种方式来做到这一点(理论上),但是我无法得到我尝试工作的任何方式。 // User Has Many? User.hasMany(ContactRequest, {as: 'Requester', foreignKey: 'requester'}); User.hasMany(ContactRequest, {as: 'Requestee', foreignKey: 'requestee'}); // […]

sequelize-nodejs如何从表的其他字段获取数据

您好我正在开发一个聊天应用程序,只是想知道如何从mysqldatabase表中的其他字段使用sequelize获取数据,因为我是全新的。 下面是我试图做到这一点: io.on('connection', function(socket){ // Send all previously sent messages for( i in messages ) { socket.emit('chat message', messages[i]); } socket.on('chat message', function(msg){ console.log('message: ' + msg); // Push the message into the in-memory array. messages.push(msg); // Storage the message for when the application is restarted. sequelize.query('INSERT INTO chat_storage(chat) VALUES("'+msg+'")').success(function() { // Insert was successful. […]

获取刚刚保存的对象的ID在Sequelize中?

所以我有这个代码: //defining partner var Partner = sequelize.define('Partner', { order: Sequelize.INTEGER, image: Sequelize.STRING, }, { tableName: 'partners', }); //creating partner instance var partner=Partner.build(); partner.save().success(function(newpartner){ console.log(newpartner.id); }); 当这个代码被执行时,2个伙伴实例被插入到数据库中。 当我访问partner id属性时,第二个被推。 这是来自控制台的日志: Executing (default): INSERT INTO `partners` (`updatedAt`,`createdAt`) VALUES ('2014-08-16 13:13:26','2014-08-16 13:13:26'); Executing (default): INSERT INTO `partners` (`id`,`createdAt`,`updatedAt`) VALUES (DEFAULT,'2014-08-16 13:13:26','2014-08-16 13:13:26'); 我需要得到合作伙伴的ID,并将其保存到数据库后发送给客户端。 我如何正确地做到这一点? 现在我只需访问id属性而不用调用save() ,因为它保存对象。 但是这没有logging。 有没有适当的方法来做到这一点?

使用承诺在钩子钩子

在Sequelize文档中我已经读过,你可以使用callback函数或者在你的钩子中返回promise 。 但是,以下代码无法为我工作 – 对于Sequelize的最新1.x和2.x版本。 我设置了用户模型: var User = function(sequelize, DataTypes) { var User = sequelize.define('User', { firstName: DataTypes.STRING, lastName: DataTypes.STRING, email: DataTypes.STRING, password: DataTypes.STRING }, { hooks: { beforeUpdate: _hashPassword, beforeCreate: _hashPassword } }); return User; }; 这是我的函数,哈希用户的密码,使用承诺(不起作用): function _hashPassword(user) { if (!user.getDataValue('password')) { return Promise.reject(); } return bcryptGenSalt(10) .then(function(salt) { return bcryptHash(user.getDataValue('password'), salt); […]