使用带有节点/表达式的书架返回搜索时更改列的名称吗?

时间:2018-12-14 19:38:50

标签: node.js express bookshelf.js

我有一个表User,其列为idemailpassword。但我只想返回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);
    });

2 个答案:

答案 0 :(得分:0)

我假设您当前的代码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);
});

答案 1 :(得分:0)

请参阅书架文档。

https://bookshelfjs.org/api.html#Model-instance-hidden

使具有相同值的列具有备用名称。您可以使用bookshelf-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.log(err);
});