Операция обновления Sequelize устанавливает в поле таблицы пустую строку, несмотря на успех операции - PullRequest
0 голосов
/ 14 февраля 2020

Эта функция обновляет таблицу администратора на основе полученной информации в запросе http. Обратите внимание на зарегистрированную информацию.

var updateAdminById = function(new_admin_data, callback) {
  logger.info("new_admin_data: " + JSON.stringify(new_admin_data));
  logger.info("new_admin_data.id: " + new_admin_data.id);
  /**new_admin_data: {"email":"what@gmail.com","mot_de_passe":"PasswordJdida","role":"operateur_sav","id":"71","nom":"Hamadi Jdid"} */

  models.admin
    .update(new_admin_data, {
      where: { id: new_admin_data.id },
      returning: true // To return the affected row
    })
    .then(function(result) {
      logger.info("Updated admin is: " + new_admin_data.id);
      console.log(result[1][0].dataValues);
      // Up until here everything is fine!
      /**
       * 2020-02-14T15:58:21+0100 <info> AdminServices.js:196  Updated admin is: 71
        {
          id: 71,
          nom: 'Hamadi Jdid',
          email: 'what@gmail.com',
          mot_de_passe: 'PasswordJdida',
          last_login: null,
          role: 'operateur_sav',
          createdAt: 2020-02-14T14:51:40.571Z,
          updatedAt: 2020-02-14T14:58:21.090Z
        }
       */
      // But, when I check in the database, I find that the password field is empty
      // Something is setting the password to empty String for some reason
      callback({
        update: true,
        admin: result[1][0] //Contains updated admin info
      });
    })
    .catch(function(error) {
      logger.error("Admin failed to update ", error);
      callback({
        update: false,
        error
      });
    });
};  

Вот запись таблицы, которую я буду изменять с помощью POSTMAN:

{
    "id": 72,
    "nom": "testUpdateButton",
    "email": "testUpdateButton@gmail.com",
    "mot_de_passe": "951357159357",
    "role": "operateur_sav",
    "last_login": null,
    "createdAt": "2020-02-14T15:11:21.860Z",
    "updatedAt": "2020-02-14T15:11:21.860Z"
}  

enter image description here
Обратите внимание, что информация была успешно получена в бэкэнд:

new_admin_data: {"id":"71","nom":"newName","email":"newName@gmail.com","mot_de_passe":"newName","role":"operateur_sav"}

, который зарегистрирован здесь:

  logger.info("new_admin_data: " + JSON.stringify(new_admin_data));
  logger.info("new_admin_data.id: " + new_admin_data.id);

Также обратите внимание, что операция прошла успешно. А вот зарегистрированный ответ после обновления:

2020-02-14T16:12:34+0100 <info> AdminServices.js:196  Updated admin is: 71
{
  id: 71,
  nom: 'newName',
  email: 'newName@gmail.com',
  mot_de_passe: 'newName',
  last_login: null,
  role: 'operateur_sav',
  createdAt: 2020-02-14T14:51:40.571Z,
  updatedAt: 2020-02-14T15:12:34.889Z
}  

Что я регистрирую, есть ответ после обновления записи таблицы:

  models.admin
    .update(new_admin_data, {
      where: { id: new_admin_data.id },
      returning: true // To return the affected row
    })
    .then(function(result) {
      logger.info("Updated admin is: " + new_admin_data.id);
      console.log(result[1][0].dataValues);

Странная вещь об этом что он успешно обновляет все поля, кроме поля mot_de_passe , которое устанавливается равным пустой строке !
Смотрите результат после извлечения этой записи таблицы из базы данных:

 {
        "id": 71,
        "nom": "newName",
        "email": "newName@gmail.com",
        "mot_de_passe": "",
        "role": "operateur_sav",
        "last_login": null,
        "createdAt": "2020-02-14T14:51:40.571Z",
        "updatedAt": "2020-02-14T15:12:34.889Z"
    }

Я проверил весь процесс обновления и, кажется, все в порядке. Поэтому я понятия не имею, почему, в частности, поле mot_de_passe устанавливается в пустую строку , несмотря на то, что ответ sequelize после обновления говорит мне, что обновление всех полей прошло успешно .
Я узнал , что Sequelize может установить значение NULL для пустой строки. Однако, поскольку я уверен, что поле mot_de_passe , которое я отправил в запросе к базе данных, не равно NULL благодаря ведению журнала, я считаю, что это не объяснение!

...