[英]Is there a way to map fields with different names in NestJS?
我目前正在開發一個與 SAP(和其他一些外部應用程序)通信的 NestJS 應用程序,不幸的是,SAP 需要一些非常具體的字段。 准確地說,在某些情況下,我需要向它發送超過 70 個字段,而在其他情況下,請求可能會返回超過 280 個字段。
由於我無法修改 SAP,因此我不得不使用與我的應用程序命名模式(camelCase 和可讀)相違背的字段,因為 SAP 使用 SCREAMING_SNAKE_CASE 和縮寫、數字甚至一些混淆了英語和德語單詞的單詞。
現在,我知道有一些不太實用的方法(比如單獨解析每個字段),但是有沒有什么方法可以節省我的時間,或者至少讓一切變得更干凈,而無需手動解析字段?
編輯:這是 SAP 返回到我的應用程序的示例
PLNT_FABRIZIEREN_C: '253D',
MRKD_PRODUCTS: ['PRODUCT1', 'PRODUCT2'],
NEUES_PRDKT: TRUE
我的應用程序中的等價物:
factoryPlantCode: '253D',
markedProducts: ['PRODUCT1', 'PRODUCT2'],
isNewProduct: true
將字段名稱保存在我的應用程序中時,我需要完全更改它,因此我仍在使用 camelCase,但仍以 SAP 知道的名稱將其發回。
你可以嘗試這樣的事情。 您需要做的就是在 key 中添加來自 SAP 的鍵並將 value 設置為您要在應用程序中使用的鍵。
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"]
})
)
感謝 Sony Bamniya 回答了我的問題,但我想出了另一種解決這個問題的方法。 通過使用類轉換器 package,我能夠重命名我的字段:
@Expose({ name: 'factoryPlantCode' })
PLNT_FABRIZIEREN_C: string
@Expose({ name: 'markedProducts' })
MRKD_PRODUCTS: string;
@Expose({ name: 'isNewProduct' })
NEUES_PRDKT: boolean;
我仍然遇到SCREAMING_SNAKE_CASE
字段的問題,但這很容易解決:我添加了一個攔截器,它使用 lodash .camelCase 將所有這些字段從SCREAMING_SNAKE_CASE
解析到camelCase
並使用Object.entries Object.entries(payload)
進行手工迭代。 還值得一提的是我的 DTO 有一個構造函數:
constructor(rawPayload) {
Object.assign(this, rawPayload);
}
在填充了我的 DTO 之后,我不得不使用類轉換classToPlain()
方法將它變成一個普通的 object (我可以在將它解析為純文本后將其解析回 DTO,但我不需要它)。 希望這對某人有幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.