一个应用程序中的不同变量名称约定

时间:2017-01-31 14:42:47

标签: node.js postgresql coding-style

这是一个非常微不足道的问题。我很好奇如何在专业人士中解决这个问题。方式。

我试图坚持变量命名约定。对于NodeJs,我正在做camelCasing。对于数据库,我正在使用PostgreSQL并使用underscore_casing。

现在,当我从PostgreSQL查询数据时出现了问题。我将获得一个具有以下格式的用户对象,

{user_id: 1, account_type : "Admin"}

我可以将此对象直接传递给服务器端渲染,并且必须使用下划线框来访问account_type。当然,我可以手动创建一个具有属性userIdaccountType的新用户JSON对象,但这是不必要的工作。

是否可以遵循两种语言的变量命名约定,并避免在某些文件中包含混合变量名称?什么是保持井井有条的好方法?

2 个答案:

答案 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];
            }
        }
    }
}

另见以下文章:Pg-promise and case sensitivity in column names

答案 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

如果您想在应用程序中使用类的模型,可以将此代码合并到构造函数或数据库加载方法中,以便它们自动处理或多或少。