有没有办法使用 pg-promise 对从 PostgreSQL 返回的列名进行驼峰式大小写?

Is there a way to Camel Case the column names returned from PostgreSQL using pg-promise?

当我们对 PostgreSQL 数据库执行查询并收到响应时,我们会将这些响应传递给我们的客户端 display/work with.

示例:

const response = [
  {
    first_name: 'Bob',
    last_name: 'English',
    title: 'The Dude',
  },
  {
    first_name: 'Harry',
    last_name: 'Smith',
    title: 'Unknown',
  },
];

然后我们的应用程序必须映射它并以相当低效和冗长的方式重命名键。有没有更好的办法?也许使用 pg-promise?

值得注意的是,当我们将数据作为 UPDATE 发送到数据库时,我们还必须转换回来。

值得注意的是,我们不打算使用像 Objection 这样的 ORM 或像 Knex 这样的查询构建器。

API 中的事件 receive 提供了如何完成此操作的可用示例:

// Example below shows the fastest way to camelize all column names.
// NOTE: The example does not do processing for nested JSON objects.

const initOptions = {

    // pg-promise initialization options...

    receive(data, result, e) {
        camelizeColumns(data);
    }
};

function camelizeColumns(data) {
    const tmp = data[0];
    for (const prop in tmp) {
        const camel = pgp.utils.camelize(prop);
        if (!(camel in tmp)) {
            for (let i = 0; i < data.length; i++) {
                const d = data[i];
                d[camel] = d[prop];
                delete d[prop];
            }
        }
    }
}

它也在 the project in the past, and documented by other developers, like in this article 的各种问题中进行了讨论,这是开始使用它的好方法。

这是一种通用方法,适用于所有类型的查询,包括流。