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');是的,我成功地使用了事件。实际上,我想要一个通用的解决方案,而不是在每个响应中编写。