SequelizeJS позволяет дублировать уникальное поле - PullRequest
0 голосов
/ 23 ноября 2018

в моем веб-приложении (NodeJS + ExpressJS + SequelizeJS) я определил модель. Пользователь:

let User = connection.define('user', {
    username: {
        type: Sequelize.STRING(40),
        unique: true,
        allowNull: false,
        validate: {
            notEmpty: true,
            min: 4,
        }
    },
    email: {
        type: Sequelize.STRING,
        unique: true,
        allowNull: false,
        notEmpty: true,
        validate: {
            isEmail: true
        }
    },
    password: {
        type: Sequelize.STRING,
        allowNull: false,
        notEmpty: true,
        validate: {
            min: 8,

        }
    },
    name: {
        type: Sequelize.STRING(50),
        validate: {
            min: 2
        }
    },
    surname: {
        type: Sequelize.STRING(50),
        validate: {
            min: 3
        }
    },
    bio: Sequelize.TEXT(140),
    lastLogin: Sequelize.DATE,
    dateJoined: Sequelize.DATE,
    active: {
        type: Sequelize.BOOLEAN,
        defaultValue: false
    }
});


Я хочу, чтобы имя пользователя и адрес электронной почты были уникальными, чтобы никто не мог повторно использовать существующиеадрес электронной почты или существующее имя пользователя.Итак, я протестировал его и заметил, что построенный запрос выглядит следующим образом:

Executing (default): 
CREATE TABLE IF NOT EXISTS `user`(
`id` INTEGER PRIMARY KEY AUTOINCREMENT, 
`username` VARCHAR(40) NOT NULL UNIQUE,
`email` VARCHAR(255) NOT NULL UNIQUE,
`password` VARCHAR(255) NOT NULL,
`nome` VARCHAR(50),
`cognome` VARCHAR(50),
`bio` TEXT,
`lastLogin` DATETIME,
`dateJoined` DATETIME,
`active` TINYINT(1) DEFAULT0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NOT NULL);

И запрос выглядит нормально.Затем я решил делать один и тот же запрос вставки (с тем же именем пользователя и адресом электронной почты) каждый раз, когда включается мой сервер узлов, чтобы проверить, сохраняется ли ограничение NOT NULL.

User.create({
        username: 'MYUSERNAME',
        email: 'MYEMAIL@GMAIL.COM',
        password: 'MYPASSWORD'
    })
        .then(newUser => {
            console.log('Insertion OK, username:', newUser.username);
        })
        .catch(error => {
            console.log(error);
        });

Каждый раз вывод консолия перезагружаю свой сервер:

Insertion OK, username: MYUSERNAME

И если я проверяю записи базы данных, в пользовательской таблице я вижу несколько строк с одинаковыми данными в одних и тех же полях.

-----------------------------------------------
| Username   | Email             | Password   |
-----------------------------------------------
| MYUSERNAME | MYEMAIL@GMAIL.COM | MYPASSWORD |
-----------------------------------------------
| MYUSERNAME | MYEMAIL@GMAIL.COM | MYPASSWORD |
-----------------------------------------------
| MYUSERNAME | MYEMAIL@GMAIL.COM | MYPASSWORD |
-----------------------------------------------



Почему не сохраняется ограничение UNIQUE?

Я использую файл sqlite3 для базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...