创建键/值映射dev / prod node.js

时间:2016-03-03 12:22:44

标签: javascript node.js

我有一个Node.js应用程序,APP-A,使用APP-B的API与另一个C#应用程序APP-B进行通信。 APP-B有一个返回JSON的RESTful API。除了一些标准字段,例如名称,描述,APP-B的密钥是在用户在系统中创建字段时定义的。生成的JSON如下所示:

{
  "name": "An example name",
  "description": "Description for the example",
  "cust_fields": {
    "cust_123": "Joe Bloggs",
    "cust_124": "Essex"
  }
}

我有两个APP-B实例,一个dev和prod环境,它们是单独的安装。因此,prod环境中的JSON如上所述,dev环境中的JSON如下所示:

{
  "name": "An example name",
  "description": "Description for the example",
  "cust_fields": {
    "cust_782": "Joe Bloggs",
    "cust_793": "Essex"
  }
}

这是在APP-A(Node.js应用程序)中通过这样的JSON映射来处理的:

{
  "name": "name",
  "description": "description",
  "cust_fields": {
    "full_name": "cust_123",
    "city": "cust_124"
  }
}

这样加载:

var map;
switch(env) {
  case 'dev':
    map = require('../env/dev/map.json');
    break;
  case 'prod':
    map = require('../env/prod/map.json');
    break;
};

module.exports = {
  name: map.name,
  description: map.description,
  cust_fields: {
    full_name: map.cust_fields.full_name,
    city: map.cust_fields.city,
  }
}

所以我想知道,有没有更好的方法来解决这个问题?我没有看到必须在prod和dev之间创建关键名称之间的某种手动关系,因为没有办法找出哪个字段对应于什么,但它似乎很多工作。

感谢阅读。

更新

我创建了一个jsFiddle来更好地说明我的问题:http://jsfiddle.net/7k9k03o6

1 个答案:

答案 0 :(得分:0)

如果映射是不可避免的,并且现在一切都是手动完成的,那么下一个最佳进展就是通过一些持久存储(即数据库)自动构建这些查找映射。

一般流程如下:

  1. 当APP-B创建新表单时,该字段信息将与所有标识信息一起存储在数据库中。您可以将生产和开发数据存储在同一个数据库中(作为标志),但可能它们只是不同的数据库。结构可能类似于customerId, formId, fieldName, fieldMapping, fieldValue, isProduction - > 123, 2, 'cust_124', 'city', 'Essex', true
  2. 当APP-A需要字段列表时,它会向DB查询相关字段列表。“在生产中查找客户X的表单Y” - > WHERE custId = 123 AND formId = 2 AND isProduction = true会产生一个字段列表及其映射值(您可以将其处理/缩减到您需要的映射中)。
  3. 此自动化流程将为您手动减少工作量。你不应该不小心错过或忘记手工生成文件的映射。

    这将为服务器处理添加一些工作,因为每次处理请求时都需要DB中的字段映射。 (您可以在每次加载客户时稍微退一步并执行一次大查询,或者每次服务器启动时进一步返回...依赖于这些自定义字段的动态性)。此外,您必须将DB结果映射到可用的列表中以用于您的目的。

    根据您监控的客户和自定义表单的数量,自动化流程可以节省大量时间,避免手工生成的所有内容出现大量错误。

相关问题