Sequelize findOrCreate giving me a SequelizeUniqueConstraintError: Validation error

一笑奈何 提交于 2019-12-07 04:10:01

问题


so I am trying to chain multiple sequelize requests together - to check if a grant exists in our database. However when I'm using the sequelize findOrCreate method I get a SequelizeUniqueConstraintError: Validation error and I can't figure out why.

This is my fund model.

module.exports = function(sequelize, DataTypes) {
  var Fund = sequelize.define("funds", {
    id: {
      type: DataTypes.INTEGER,
      field: 'id',
      primaryKey: true,
      unique: true,
      autoIncrement: true,
    },
    title: {
      type: DataTypes.TEXT,
      field: 'title'
    },
    tags: {
      type: DataTypes.ARRAY(DataTypes.TEXT),
      field: 'tags'
    },
    minimum_age: {
      type: DataTypes.INTEGER,
      field: 'minimum_age'
    },
    maximum_age: {
      type: DataTypes.INTEGER,
      field: 'maximum_age'
    },
    minimum_amount: {
      type: DataTypes.INTEGER,
      field: 'minimum_amount'
    },
    maximum_amount: {
      type: DataTypes.INTEGER,
      field: 'maximum_amount'
    },
    invite_only: {
      type: DataTypes.BOOLEAN,
      field: 'invite_only'
    },
    created_at: {
      type: DataTypes.DATE,
      field: 'created_at',
      defaultValue: sequelize.fn('NOW')
    },
    updated_at: {
      type: DataTypes.DATE,
      field: 'updated_at',
      defaultValue: sequelize.fn('NOW')
    },
    deadline: {
      type: DataTypes.DATE,
      field: 'deadline',
    },
    link: {
      type: DataTypes.TEXT,
      field: 'link'
    },
    description: {
      type: DataTypes.TEXT,
      field: 'description'
    },
    countries: {
      type: DataTypes.ARRAY(DataTypes.TEXT),
      field: 'countries'
    },
    religion: {
      type: DataTypes.ARRAY(DataTypes.TEXT),
      field: 'religion'
    },
    gender: {
      type: DataTypes.STRING(40),
      field: 'gender'
    },
    financial_situation: {
      type: DataTypes.TEXT,
  field: 'financial_situation'
},
email: {
  type: DataTypes.STRING(40),
  field: 'email'
},
merit_or_finance: {
  type: DataTypes.TEXT,
  field: 'merit_or_finance'
},
charity_number:{
  type: DataTypes.INTEGER,
  field: 'charity_number'
}
}, {
    timestamps: true,
    underscored: true,
    paranoid: true


});

 return Fund;
};

This is my controller function

fundProfile: function(req, res){
 var fundId = req.params.id;
 models.users.findById(fundId).then(function(user){
  var scholarshipName = user.username;
  var email = user.email;
  //see if fund already exists on fund table
  models.funds.findOrCreate({where:{title: scholarshipName}, defaults:{email: email}}).spread(function(user, created){
    console.log("EVEN HERE", created);
    if(created){
      console.log("LOOK AT ME", user);
      models.users.find({where: {fund_or_user: user.id}}).then(function(user){
        res.render('signup/new-fund-profile', {user: user});
      })
    }

    else{

      var fundTableId = user.id;
      user.update({
        email: email
      }).then(function(user){
        models.users.findById(fundId).then(function(user){
          user.update({
            fund_or_user: fundTableId
          }).then(function(user){
            res.render('signup/new-fund-profile', {user: user});
          })
        })
      })
    }
});
}

Your help is much appreciated

@edit

This is the error shown
 Unhandled rejection SequelizeUniqueConstraintError: Validation error
at Query.formatError      (/Users/androswong/startup/silofunds/node_modules/sequelize/lib/dialects/postgres/query.js:326:16)
at /Users/androswong/startup/silofunds/node_modules/sequelize/lib/dialects/postgres/query.js:121:24
at tryCatcher (/Users/androswong/startup/silofunds/node_modules/sequelize/node_modules/bluebird/js/release/util.js:11:23)
at Promise._settlePromiseFromHandler (/Users/androswong/startup/silofunds/node_modules/sequelize/node_modules/bluebird/js/release/promise.js:488:35)
at Promise._settlePromise (/Users/androswong/startup/silofunds/node_modules/sequelize/node_modules/bluebird/js/release/promise.js:548:18)
at Promise._settlePromise0 (/Users/androswong/startup/silofunds/node_modules/sequelize/node_modules/bluebird/js/release/promise.js:593:10)
at Promise._settlePromises (/Users/androswong/startup/silofunds/node_modules/sequelize/node_modules/bluebird/js/release/promise.js:676:18)
at Promise._fulfill (/Users/androswong/startup/silofunds/node_modules/sequelize/node_modules/bluebird/js/release/promise.js:617:18)
at PromiseArray._resolve (/Users/androswong/startup/silofunds/node_modules/sequelize/node_modules/bluebird/js/release/promise_array.js:125:19)
at PromiseArray._promiseFulfilled (/Users/androswong/startup/silofunds/node_modules/sequelize/node_modules/bluebird/js/release/promise_array.js:143:14)
at PromiseArray._iterate (/Users/androswong/startup/silofunds/node_modules/sequelize/node_modules/bluebird/js/release/promise_array.js:113:31)
at PromiseArray.init [as _init] (/Users/androswong/startup/silofunds/node_modules/sequelize/node_modules/bluebird/js/release/promise_array.js:77:10)
at Promise._settlePromise (/Users/androswong/startup/silofunds/node_modules/sequelize/node_modules/bluebird/js/release/promise.js:545:21)
at Promise._settlePromise0 (/Users/androswong/startup/silofunds/node_modules/sequelize/node_modules/bluebird/js/release/promise.js:593:10)
at Promise._settlePromises (/Users/androswong/startup/silofunds/node_modules/sequelize/node_modules/bluebird/js/release/promise.js:676:18)
at Async._drainQueue (/Users/androswong/startup/silofunds/node_modules/sequelize/node_modules/bluebird/js/release/async.js:125:16)

来源:https://stackoverflow.com/questions/35248117/sequelize-findorcreate-giving-me-a-sequelizeuniqueconstrainterror-validation-er

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!