sails.js Логическая ошибка в перехвате ошибок MySQL ORM

#mysql #node.js #sails.js #waterline

#mysql #node.js #sails.js #ватерлиния

Вопрос:

В моей пользовательской модели у меня есть:

 module.exports = {

    attributes: {

        username: {
            type: 'string',
            unique: true,
            required: true,
            minLength: 5,
            maxLength: 15,          
            alphanumeric: true
        }
      }
}
  

Теперь, когда я пытаюсь вставить дубликат имени пользователя, я получаю следующее сообщение:

Логическая ошибка в MySQL ORM.

{ [Ошибка: ER_DUP_ENTRY: дубликат записи ‘username’ для ключа ‘username’] код: ‘ER _DUP_ENTRY’, индекс: 0 }

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

 User.create({
    username: "username"
}).done(function(err, data){
    if(err){
               //the error isn't here
    }
});
  

Комментарии:

1. done не рекомендуется, поскольку его использование сбивало с толку (поскольку done в библиотеках promise часто есть). Используйте exec вместо этого.

Ответ №1:

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

 User.create({
    username: "username"
})
.then(function(data){
    console.log("Success", data);
},function(err){
    console.log("My error here", err);
});
  

Ответ №2:

 User.create({
    username: "username"
}).exec(function(err, data){
    if(err){
           //the error isn't here
    }
    // data process
});