Node.js 使用bookshelf with node/express返回搜索时是否更改列的名称?
我有一个表用户,其列为Node.js 使用bookshelf with node/express返回搜索时是否更改列的名称?,node.js,express,bookshelf.js,Node.js,Express,Bookshelf.js,我有一个表用户,其列为id、email、和password。但是我只想返回id和电子邮件,而不是像这样显示列的名称: { "users": [ { "id": 1, "email": "john@", } ] } 我想展示一些东西,比如: { "users": [ { "id": 1, "ema
id
、email
、和password
。但是我只想返回id和电子邮件,而不是像这样显示列的名称:
{
"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.log(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.log(err);
});
请参考书架上的文件 为具有相同值的列提供备用名称。您可以使用BookshelfVirtuals插件来实现这一点 示例:
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.log(err);
});
如果您希望对数据库中的电话号码列进行加密,是否可以更改结果的值,如mobile:'999999999'=>mobile:'XXXXXXXX9999'@laliteshupadhayaya。您可以使用bookshelf加密列。然而,在从数据库中获取电话号码后,您要求更改其响应。您可以编写一个简单的逻辑来实现,让res={mobile:'9999999'}res.mobile=res.mobile.replaceAll('9','X');是的,我成功地使用了事件。实际上,我想要一个通用的解决方案,而不是在每个响应中编写。