У меня есть таблица User со столбцом id, email и password. Но я хочу вернуть только идентификатор и адрес электронной почты, а не показывать имя столбца следующим образом:
{
"users": [
{
"id": 1,
"email": "john@",
}
]
}
Я хочу показать что-нибудь вроде:
{
"users": [
{
"id": 1,
"email_user": "john@",
}
]
}
Вот как я звоню для поиска всех пользователей:
User.fetchAll({columns:['id','email']}).then((resData) => {
return res.json({users: resData.map(function(item) {
return item.fields();
})});
}).catch(err => {
console.info(err);
});





Я предполагаю, что ваш текущий код item.fields() возвращает первый из двух результатов. Во время картирования вы должны иметь возможность создавать совершенно разные объекты, поэтому вы можете настроить свои результаты в соответствии с вашими потребностями:
User.fetchAll({columns:['id','email']}).then((resData) => {
return res.json({users: resData.map(function(item) {
const fields = item.fields();
return { id: fields.id, email_user: fields.email };
})});
}).catch(err => {
console.info(err);
});
Пожалуйста, обратитесь к документу на книжной полке.
https://bookshelfjs.org/api.html#Model-instance-hidden
Чтобы иметь альтернативные имена для столбцов с одинаковыми значениями. Для этого вы можете использовать плагин bookhelf-virtuals-plugin.
https://github.com/bookshelf/virtuals-plugin
Пример:
bookshelf.plugin('bookshelf-virtuals-plugin');
const Users = bookshelf.model('Users', {
tableName: 'users',
hidden: ['password'],
virtuals: {
email: function () {
return this.get("email_user");
},
},
})
User.fetchAll().then((resData) => {
res.status(200).send(resData.toJSON({ virtuals: true }))
}).catch(err => {
console.info(err);
});
@LaliteshUpadhyaya, если вы хотите зашифровать столбец с номером телефона в своей базе данных. вы можете использовать ссылка на сайтКнижная полка-зашифровать-столбцы. В то время как вы просите изменить ответ телефонного номера после получения его из базы данных. Вы можете написать простую логику для достижения этой цели let res = {mobile: '9999999999'} res.mobile = res.mobile.replaceAll ('9', 'X'); console.info (res).
Да, я добился успеха с использованием событий. На самом деле мне нужно универсальное решение для этого, а не писать в каждом ответе.
Можем ли мы изменить значение результата, например, mobile: '99999999999' => mobile: 'XXXXXXXX9999'