Então você estava usando inocentemente pg-promise
e tudo estava bom, mas um dia adicionou eg userId
coluna ao seu banco de dados, e: db.any('select * from products')
retornou ao [{ userid: 1 }]
invés de [{ userId: 1 }]
.
A razão para isso é o downcasing do PostgreSQL nos nomes das colunas em todas as nossas consultas. Poderíamos evitar esse comportamento colocando os nomes das colunas entre aspas ( select "userId" from products
), mas isso tornaria nosso código um pouco pesado.
Então vamos:
- renomear todas as colunas do nosso banco de dados de userId (camelCase) para user_id (sublinhado)
adicionar
receive
propriedade às opções da página:const pgOptions = {
receive: (data, result, e) => {
camelizeColumns(data);
}
};
const camelizeColumns = (data) => {
const template = data[0];
for (let prop in template) {
const camel = pgPromise.utils.camelize(prop);
if (!(camel in template)) {
for (let i = 0; i < data.length; i++) {
let d = data[i];
d[camel] = d[prop];
delete d[prop];
}
}
}
}
const pgPackage = pgPromise.default(pgOptions);Aqui estão os documentos para a opção de recebimento . Ele pega quais
query
métodos retornariam e os transforma antes de retornar.mude tudo
db.any('select * from products where userId = ${userId}', { userId })
para
db.any('select * from products where user_id = ${userId}', { userId })
É isso aí! Agora você estará recebendo { userId: 1 }
consultas como db.any('select user_id from products')
.