我有一个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。
答案 0 :(得分:0)
如果映射是不可避免的,并且现在一切都是手动完成的,那么下一个最佳进展就是通过一些持久存储(即数据库)自动构建这些查找映射。
一般流程如下:
customerId, formId, fieldName, fieldMapping, fieldValue, isProduction
- > 123, 2, 'cust_124', 'city', 'Essex', true
WHERE custId = 123 AND formId = 2 AND isProduction = true
会产生一个字段列表及其映射值(您可以将其处理/缩减到您需要的映射中)。此自动化流程将为您手动减少工作量。你不应该不小心错过或忘记手工生成文件的映射。
这将为服务器处理添加一些工作,因为每次处理请求时都需要DB中的字段映射。 (您可以在每次加载客户时稍微退一步并执行一次大查询,或者每次服务器启动时进一步返回...依赖于这些自定义字段的动态性)。此外,您必须将DB结果映射到可用的列表中以用于您的目的。
根据您监控的客户和自定义表单的数量,自动化流程可以节省大量时间,避免手工生成的所有内容出现大量错误。