2017-06-15 68 views
1

這裏是我的檢查電子郵件ID模型驗證存在與否sequelize.js ORM:唯一的電子郵件驗證爲MySQL不工作

email:{ 
      type:Sequelize.STRING, 
      validate:{ 
       notEmpty:{ 
        args:true, 
        msg:"Email-id required" 
       }, 
       isEmail:{ 
        args:true, 
        msg:'Valid email-id required' 
       } 
      }, 
      unique: { 
       args:true, 
       msg: 'Email address already in use!' 
      } 

     } 

其他所有驗證工作正常,除了unique電子郵件validion

+0

您是否在電子郵件字段中添加了唯一索引? –

+1

是它的唯一索引 – Jabaa

回答

0

嘗試這

email:{ 
     type:Sequelize.STRING, 
     validate:{ 
      notEmpty:{ 
       args:true, 
       msg:"Email-id required" 
      }, 
      isEmail:{ 
       args:true, 
       msg:'Valid email-id required' 
      } 
     }, 
     unique: { msg: 'Email address already in use!' } 

    } 
+0

它沒有工作, – Jabaa

+0

這個規則從來沒有解僱,但所有其他規則工作正常 – Jabaa

2

我有同樣的問題,要解決這個我第一次加入到索引模型的表:

queryInterface.addIndex('users', ['email'], { 
     indexName: 'email', 
     indicesType: 'UNIQUE' 
    }) 

並設置其名稱等於該字段,因爲如果你不這樣做,它將默認創建一個,並且該模型將無法使用它。

email: { 
    type: Sequelize.STRING(191), 
    allowNull: false, 
    unique: { 
     msg: 'your-message-here' 
    } 
}, 

我不知道這是否是在sequelize或錯誤與我使用的版本有問題,但它只有在我設置索引名作爲同一領域的工作。

+0

不得不添加索引,使其工作...像這樣'sequelize.define('用戶',{。 ..},{indexes:[{unique:true,fields:[「email」]}]});' –

0
email: { 
     type : DataTypes.STRING, 
     validate : { 
     isEmail: { 
      msg: "wrong format email" 
     }, 
     notEmpty: { 
      msg: 'Email not null' 
     }, 
     isUnique: function(value, next){ 

      'table'.find({ 
      where : { 
       email:value, 
       id:{[Op.ne]: this.id} 
      } 
      }).then(function(result){ 
      if(result === null){ 

       return next() 

      }else{ 
       return next(' Email already use') 
      } 
      }).catch(err =>{ 
       return next() 
      }) 
     } 
     } 
    } 
+0

我覺得內建函數已經有了那個db用來尋找唯一的方法,然後觸發你自己的查詢。 –

相關問題