Эта функция обновляет таблицу администратора на основе полученной информации в запросе 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"
}
Обратите внимание, что информация была успешно получена в бэкэнд:
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 благодаря ведению журнала, я считаю, что это не объяснение!