it-swarm.com.ru

Необработанный отказ SequelizeUniqueConstraintError: Ошибка проверки

Я получаю эту ошибку:

Unhandled rejection SequelizeUniqueConstraintError: Validation error

Как я могу это исправить?

Это мои модели/user.js

"use strict";

module.exports = function(sequelize, DataTypes) {
  var User = sequelize.define("User", {
    id:  { type: DataTypes.INTEGER, autoIncrement: true, primaryKey: true},
    name: DataTypes.STRING,
    environment_hash: DataTypes.STRING
  }, {
    tableName: 'users',
    underscored: false,
    timestamps: false
  }

  );

  return User;
};

И это мои маршруты.

app.post('/signup', function(request, response){

        console.log(request.body.email);
        console.log(request.body.password);

        User
        .find({ where: { name: request.body.email } })
            .then(function(err, user) {
                if (!user) {
                        console.log('No user has been found.');

                        User.create({ name: request.body.email }).then(function(user) {
                            // you can now access the newly created task via the variable task
                            console.log('success');
                        });

                } 
            });



    });
4
Filipe Ferminiano

Вызов User.create() возвращает Promise.reject(), но .catch(err) для его обработки не существует. Не улавливая ошибку и не зная входных значений, трудно сказать, что такое ошибка проверки - request.body.email может быть слишком длинным и т.д.

Перехватить обещание отклонить, чтобы увидеть ошибки/подробности проверки

User.create({ name: request.body.email })
.then(function(user) {
    // you can now access the newly created task via the variable task
    console.log('success');
})
.catch(function(err) {
    // print the error details
    console.log(err, request.body.email);
});
9
doublesharp

Проверьте в своей базе данных, если у вас есть Уникальное ограничение , я предполагаю, что вы поместили какое-то значение в unique: true и изменили его, но sequelize не смог удалить это ограничение из вашей базы данных.

5
Ricardo Machado

У меня была эта проблема с моей базой данных QA. Иногда новая запись сохранялась в базе данных, а иногда не получалась. При выполнении одного и того же процесса на моей рабочей станции он всегда будет успешным.

Когда я уловил ошибку (за хороший совет @ doublesharp) и распечатал полные результаты на консоли, он подтвердил, что нарушается уникальное ограничение, в частности столбец идентификатора первичного ключа, для которого по умолчанию установлено значение автоинкрементного значения.

Я заполнил свою базу данных записями, и хотя идентификаторы этих записей также были установлены на автоинкремент, идентификаторы 200-некоторых записей были разбросаны между 1 и 2000, но последовательность автоинкремента базы данных была установлена ​​на 1. Обычно следующий идентификатор в последовательности не использовался, но иногда он уже был занят, и база данных возвращала эту ошибку.

Я использовал ответ здесь , чтобы сбросить последовательность, чтобы начать после последней из моих отобранных записей, и теперь он работает каждый раз.

1
aherocalledFrog