是否有一个很好的框架或方法来重构JavaScript对象?

时间:2015-03-17 19:08:46

标签: javascript node.js rest orm mapping

我正在Node.js中编写一个应用程序。我需要将从我的数据库层返回的JavaScript对象转换为我需要从REST服务返回的JavaScript对象。我可能需要添加或删除某些属性,或者可能需要展平一些结构。例如,这是从数据库层返回的User对象:

{
    "id": 1234,
    "username": "jsmith",
    "person": {
        "first_name": "John",
        "last_name": "Smith"
    }
}

我想从REST层返回的对象是

{
    "_links": {
        "self": { "href": "/users/jsmith" },
    },
    "username": "jsmith",
    "firstName": "John",
    "lastName": "Smith"
}

以下是更改:

  1. “id”属性已删除
  2. 已添加“链接”部分
  3. “person”对象已展平为父对象
  4. “first_name”和“last_name”属性已从snake_case转换为camelCase
  5. 我显然可以对这些转换中的每一个进行手工编码,但这样效率很低且容易出错。你知道任何可以缓解这种痛苦的框架或方法吗?

    P.S。我基本上在寻找类似于名为dozer的Java框架。

1 个答案:

答案 0 :(得分:0)

在将数据推送到RESTAPI之前,您需要一个自定义函数来转换从数据库返回的对象。

一个例子:

var dbObject = db.query(...); //this is what you get from your DB query

//Here is your REST API object that you will send back
var restObject = (function(obj){
  var link = {
    self: {
        href: "/users/" + obj.username
    }
  };

  var username = obj.username;
  var firstname = obj.person.first_name;
  var lastname = obj.person.last_name;

  return JSON.stringify({
    _links: link,
    username: username,
    firstName: firstname,
    lastName: lastname
  })

})(dbObject);

显然,可以清理/自定义以适合您的代码(例如:您的数据库查询可能是异步的,因此restObject需要反映这一点)。此外,假设您的数据库发送回JSON对象,您将需要考虑到这一点。