这是一个非常微不足道的问题。我很好奇如何在专业人士中解决这个问题。方式。
我试图坚持变量命名约定。对于NodeJs,我正在做camelCasing。对于数据库,我正在使用PostgreSQL并使用underscore_casing。
现在,当我从PostgreSQL查询数据时出现了问题。我将获得一个具有以下格式的用户对象,
{user_id: 1, account_type : "Admin"}
我可以将此对象直接传递给服务器端渲染,并且必须使用下划线框来访问account_type。当然,我可以手动创建一个具有属性userId
和accountType
的新用户JSON对象,但这是不必要的工作。
是否可以遵循两种语言的变量命名约定,并避免在某些文件中包含混合变量名称?什么是保持井井有条的好方法?
答案 0 :(得分:1)
这是解决此问题的两种好方法。最简单的 - 不进行转换,使用确切的数据库名称。第二个是自动的驼峰列。
无论哪种方式,您应该始终遵循所有PostgreSQL声明的下划线表示法,因为它将为您提供在以后的应用程序中激活camel-casing的选项(如果有必要)。永远不要在数据库中使用驼峰式内容,否则以后会遇到很多痛苦。
如果你想要两全其美,请遵循所有PostgreSQL声明的下划线表示法,并在读取数据时转换为驼峰表。
下面是如何使用pg-promise正确执行此操作的示例,从事件receive示例中复制:
// Example below shows the fastest way to camelize column names:
var options = {
receive: function (data, result, e) {
camelizeColumns(data);
}
};
function camelizeColumns(data) {
var template = data[0];
for (var prop in template) {
var camel = pgp.utils.camelize(prop);
if (!(camel in template)) {
for (var i = 0; i < data.length; i++) {
var d = data[i];
d[camel] = d[prop];
delete d[prop];
}
}
}
}
答案 1 :(得分:0)
我也在努力解决这个问题,而且我已经得出结论,除非你重写来自数据库的对象,否则真的无法避免这种丑陋。幸运的是,这在Javascript中并不太难:
const fromDBtoJS = (obj) => {
// declare a variable to hold the result
const result = {};
// iterate over the keys on the object
Object.keys(obj).forEach((key) => {
// adjust the key
const newKey = key.replace(/_[a-z]/g, (x) => x[1].toUpperCase());
// add the value from the old object with the new key
result[newKey] = obj[key];
});
// return the result
return result;
};
这里是JSFiddle。 &#34;替换&#34;上面的代码被发现here
如果您想在应用程序中使用类的模型,可以将此代码合并到构造函数或数据库加载方法中,以便它们自动处理或多或少。