javascript - NestJS 有没有办法映射不同名称的字段?

标签 javascript node.js typescript nestjs

我目前正在开发一个与 SAP(以及其他一些外部应用程序)通信的 NestJS 应用程序,不幸的是,SAP 需要一些非常特定命名的字段。准确地说,在某些情况下,我需要向它发送超过 70 个字段,而在其他情况下,一个请求可能会返回超过 280 个字段。

由于我无法修改 SAP,我被迫使用与我的应用程序命名模式(驼峰式和可读)相悖的字段,因为 SAP 使用 SCREAMING_SNAKE_CASE 以及缩写、数字,甚至一些混合英语和英语的单词。德语单词。

现在,我知道有一些不太实用的方法(例如单独解析每个字段),但是有没有什么可以节省我的时间或至少使一切变得更干净而无需手动解析字段?

编辑:以下是 SAP 返回给我的应用程序的示例

PLNT_FABRIZIEREN_C: '253D',
MRKD_PRODUCTS: ['PRODUCT1', 'PRODUCT2'],
NEUES_PRDKT: TRUE

以及我的应用程序中的等效内容:

factoryPlantCode: '253D',
markedProducts: ['PRODUCT1', 'PRODUCT2'],
isNewProduct: true

将字段名称保存到应用程序时,我需要完全更改字段名称,因此我仍然使用驼峰命名法,但仍使用 SAP 知道的名称将其发回。

最佳答案

你可以尝试这样的事情。您所需要做的就是在 key 中添加来自 SAP 的 key ,并将 value 设置为您要在应用程序中使用的 key 。

const mappings = {
  PLNT_FABRIZIEREN_C: "factoryPlantCode",
  MRKD_PRODUCTS: "markedProducts",
  NEUES_PRDKT: "isNewProduct"
}

const getFormattedVersion = (data) => {
  const returnData = {};
  Object.keys(data).forEach(key => {
    returnData[mappings[key]] = data[key];
  })
  return returnData
}

const getSAPSupportedVersion = (data) =>{
  const returnData = {};
  Object.keys(data).forEach(key => {
    const mappingKeys = Object.keys(mappings)
    const mappingValues = Object.values(mappings)
    const mappedKey = mappingKeys[mappingValues.indexOf(key)];
    
    returnData[mappedKey] = data[key];
  })

  return returnData
}

console.log(
   getFormattedVersion({ 
      PLNT_FABRIZIEREN_C: '253D',
      MRKD_PRODUCTS: ['PRODUCT1', 'PRODUCT2'],
            NEUES_PRDKT: true 
    })
)

console.log(
   getSAPSupportedVersion({
     factoryPlantCode: "253D",
     isNewProduct: true,
     markedProducts: ["PRODUCT1", "PRODUCT2"]
  })
)

关于javascript - NestJS 有没有办法映射不同名称的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70664965/

相关文章:

javascript - 如果数据项不提供 "id"和 "text"字段名,如何将 select2 与远程数据一起使用?

javascript - 如何在 Sequelize JS 和 PostgreSQL 中的 1 :M relationship when implementing with . bulkCreate() 中使用外键

angular - Nativescript - 错误装饰器中不支持函数调用,但调用了 'NativeScriptRouterModule'

node.js - 服务器错误消息 [ERR_INVALID_ARG_TYPE] :

angular - 在 Angular 模型中转换对象的更好方法

angular - 类型 'void' 上不存在属性订阅

javascript - 将 ng-bootstrap datepicker 包装在自定义组件中

javascript - ES6 react 状态变化不影响渲染内联 if 子句

javascript - 使用 Javascript 连接字符串以组合新的 DOM 元素时,它只采用第一个空格分隔值

node.js - 有人可以建议一个单行正则表达式来解析带有 - 或/分隔符的字母数字和可选数字 ID 吗?