Articles of sequelize.js

GraphQL查询与表连接

我正在学习GraphQL所以我build立了一个小项目。 比方说,我有2个模型, User和Comment 。 const Comment = Model.define('Comment', { content: { type: DataType.TEXT, allowNull: false, validate: { notEmpty: true, }, }, }); const User = Model.define('User', { name: { type: DataType.STRING, allowNull: false, validate: { notEmpty: true, }, }, phone: DataType.STRING, picture: DataType.STRING, }); 关系是1:很多,用户可以有很多评论。 我已经build立了这样的架构: const UserType = new GraphQLObjectType({ name: 'User', fields: () […]

使用Sequelize进行多对多关系的简单示例

我正在尝试使用Sequelize构build表之间多对多关系的简单示例。 不过,这似乎比我预料的要棘手。 这是我目前的代码( ./db.js文件导出Sequelize连接实例)。 const Sequelize = require("sequelize"); const sequelize = require("./db"); var Mentee = sequelize.define('mentee', { id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true }, name: { type: Sequelize.STRING } }); var Question = sequelize.define('question', { id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true }, text: { type: Sequelize.STRING } }); var MenteeQuestion = […]

如何在Sequelize ORM中插入PostGIS几何点?

我想在Sequelize.js ORM中有一个几何列的表中插入一行。 我有纬度,经度和高度,需要先将它转换为一个点,然后才能将其作为几何体插入。 执行转换的PostGIS存储过程是 ST_MakePoint( longitude, latitude, altitude ) 插入一行我正在使用sequelize model.create函数 models.Data.create({ location: "ST_MakePoint("+request.params.lon+", "+request.params.lat+", "+request.params.alt+")", // PSUEDO code, How can I call this function? speed: request.params.spd, azimuth: request.params.azi, accuracy: request.params.acc }); 现在我想要做的是当我插入字段location返回"ST_MakePoint("+request.params.lon+", "+request.params.lat+", "+request.params.alt+")"该行。 我怎样才能做到这一点?

续集classMethods vs instanceMethods

所以开始我所有的事情冒险的节点。 我想学习的工具之一是Sequelize。 所以我会开始我想做的事情: 'use strict'; var crypto = require('crypto'); module.exports = function(sequelize, DataTypes) { var User = sequelize.define('User', { username: DataTypes.STRING, first_name: DataTypes.STRING, last_name: DataTypes.STRING, salt: DataTypes.STRING, hashed_pwd: DataTypes.STRING }, { classMethods: { }, instanceMethods: { createSalt: function() { return crypto.randomBytes(128).toString('base64'); }, hashPassword: function(salt, pwd) { var hmac = crypto.createHmac('sha1', salt); return hmac.update(pwd).digest('hex'); }, authenticate: […]

在Sequelize事务中使用循环和promise

我目前正在构build一个Nodejs,Express,Sequelize(w。PostgreSQL)应用程序,并且遇到了一些使用promise和transaction和loops的问题。 我想弄清楚如何在事务中使用for循环。 我试图通过成员列表循环,并在数据库中为每个成员创build一个新的用户。 我知道下面的代码是错误的,但它显示了我正在尝试做什么。 任何人都可以指向正确的方向吗? var members = req.body.members; models.sequelize.transaction(function (t) { for (var i = 0; i < members.length; i++) { return models.User.create({'firstname':members[i], 'email':members[i], 'pending':true}, {transaction: t}).then(function(user) { return user.addInvitations([group], {transaction: t}).then(function(){}).catch(function(err){return next(err);}); }) }; }).then(function (result) { console.log("YAY"); }).catch(function (err) { console.log("NO!!!"); return next(err); });

创build或更新Sequelize

我在我的Nodejs项目中使用Sequelize,我发现一个问题,我很难解决。 基本上我有一个cron从服务器获取对象的数组,而不是将其作为对象插入到我的数据库(对于这种情况下,漫画)。 但是,如果我已经有一个对象,我必须更新它。 基本上我有一个对象的数组,可以使用BulkCreate()方法。 但是当Cron重新开始的时候,它并不能解决问题,所以我需要使用一个upsert真正的标志进行某种更新。 主要问题:我必须有一个callback,所有这些创build或更新后才会触发一次。 有没有人有一个想法,我该怎么做? 迭代一个对象数组..创build或更新它,然后得到一个单一的callback后? 感谢您的关注

无法从本地节点应用程序以sequelize连接到heroku postgresql数据库

我试图从Sequelize的本地nodejs应用程序连接到Heroku postgresql数据库。 我遵循这两个指南,一切都在英雄服务器端的工作完全正常,但我的节点应用程序将不会连接到heroku当我在我的Mac本地运行它。 http://sequelizejs.com/articles/heroku https://devcenter.heroku.com/articles/connecting-to-heroku-postgres-databases-from-outside-of-heroku 以下是我如何启动本地应用程序: DATABASE_URL=$(heroku config:get DATABASE_URL) nodemon 得到我: Sequelize: Unable to connect to the database: 但是我通过这样做得到正确的URL: echo $(heroku config:get DATABASE_URL) 这些命令工作正常: heroku pg:psql psql $(heroku config:get DATABASE_URL) 这是我的nodejs代码: var match = process.env.DATABASE_URL.match(/postgres:\/\/([^:]+):([^@]+)@([^:]+):(\d+)\/(.+)/) sequelize = new Sequelize(match[5], match[1], match[2], { dialect: 'postgres', protocol: 'postgres', port: match[4], host: match[3], logging: false }) sequelize .authenticate() […]

协会会议3个桌子,多到很多

我有4张桌子 – client – project – user – userProject 一个项目属于客户端,它需要有客户端外键client_id。 UserProject有project_id和user_id外键,属于项目和用户。 一个用户拥有他的项目的客户。 我如何列出一个用户的客户?

getter和setter如何工作?

问题总结:从概念上讲,什么是getter和setter,以及为什么要使用它们? 摘自http://docs.sequelizejs.com/en/latest/docs/models-definition/?highlight=getterMethods#getters-setters : 可以在模型上定义“对象属性”getter和setter函数,这些函数既可用于映射到数据库字段的“保护”属性,也可用于定义“伪”属性。 “保护”是什么意思? 反对什么? 什么是psuedo属性? 我也在努力处理下面的示例代码。 我们似乎是两次设置“标题”。 v是什么意思? 见下文: var Foo = sequelize.define('Foo', { title: { type : Sequelize.STRING, allowNull: false, } }, { getterMethods : { title : function() { /* do your magic here and return something! */ }, title_slug : function() { return slugify(this.title); } }, setterMethods : { title […]

续集列的唯一约束

使用NodeJS和Sequelize 2.0,我正在写一个迁移来创build一个新表。 除了主键之外,我还想将第二列标记为唯一。 在文档中我找不到任何关于此的信息。 migration.createTable('data', { id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true }, key: { // needs to be unique type: DataTypes.UUID, allowNull: false } }) .then(function () { done(); });