mysql - Sequelize 的唯一电子邮件地址

标签 mysql node.js sequelize.js

我正在使用 Sequelize/MySQL 运行 ExpressJS,并非常努力地尝试让一个简单的验证器检查工作以用于唯一的电子邮件地址。

这是我的用户模型。对于我的生活,我不明白为什么这允许具有重复电子邮件地址的记录。 email.unique=true 肯定会阻止这种情况。

'use strict';
module.exports = (sequelize, DataTypes) => {
  var User = sequelize.define('User', {
    firstName: DataTypes.STRING,
    lastName: DataTypes.STRING,
    email: {
      type: DataTypes.STRING,
      allowNull: false,
      unique: true,
      validate: {
        isEmail: {
          msg: "Must be a valid email address",
        }
      }
    }
  }, {
    indexes: [{
      fields: ['email'],
      unique: true,
    }]
  });
  return User;
};

感谢任何帮助。

编辑: 这里要求的是创建用户的 Controller 代码。

const User = require('../models').User;

exports.create = (req, res) => {
  User.create( req.body )
  .then( user => {
    res.json( user );
  })
  .catch( errors => {
    res.json({ errors: errors.errors });
  });
};

最佳答案

解决这个问题的一种方法是使用 sequelize.sync() 根据模型中指定的模式创建表如果表存在,那么你应该传递 {force: true 到 sync 方法,表将被删除并创建一个新表。

尽管由于迁移文件等问题,不强烈推荐使用 sequelize.sync(),尤其是在生产中,但您可以通过谷歌搜索了解更多详细信息。

关于mysql - Sequelize 的唯一电子邮件地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48499487/

相关文章:

node.js - 在单独的模块中检索对象数据的正确方法

mysql - Hadoop 和 MySQL 集成

javascript - 无法将变量作为条件发送到水线查询

javascript - TypeError : Router. use() 需要中间件函数,但在 Function.use 处未定义

node.js - 如何让failureFlash在Passport.js本地策略中显示Flash消息?

node.js - Sequelize : Adding a day to the date doesn't work

MySQL:为什么这些查询返回不同的结果?

mysql - 每月最新条目

mysql - 如何优化 Entity Framework 查询

mysql - 将 Twilio 日期时间格式转换为 mysql