node-red/compiliance-js/flow1-handle-create-response.js
ruoyunbai d9b08c89ee js
2025-11-17 10:55:25 +08:00

85 lines
2.3 KiB
JavaScript

'use strict';
/**
* 解析创建接口返回值,记录是否成功以及实际主键。
*/
return handleCreateResponse(msg, node);
function handleCreateResponse(message, node) {
let parsed;
try {
parsed = typeof message.payload === 'string' ? JSON.parse(message.payload) : message.payload;
} catch (error) {
node.error(`创建接口响应解析失败:${error.message}`, message);
message.isCreated = false;
return message;
}
const success = parsed && typeof parsed === 'object' && parsed.code === 0;
message.isCreated = success;
if (!success) {
return message;
}
const identityField = (message.crudFlow && message.crudFlow.identityField) ||
message.identityField || 'dsid';
const candidate = extractPrimaryKey(parsed, identityField);
if (candidate) {
message.primaryKeyValue = candidate;
if (message.crudFlow && message.crudFlow.delete) {
message.crudFlow.delete.actualKey = candidate;
}
}
return message;
}
function extractPrimaryKey(response, identityField) {
if (!response || typeof response !== 'object') {
return null;
}
const data = response.data;
if (!data) {
return null;
}
if (typeof data === 'string' || typeof data === 'number') {
return String(data);
}
if (Array.isArray(data)) {
for (const item of data) {
const value = extractPrimaryKey(item, identityField);
if (value) {
return value;
}
}
} else if (typeof data === 'object') {
if (data[identityField] !== undefined && data[identityField] !== null) {
return String(data[identityField]);
}
if (Array.isArray(data.list)) {
for (const item of data.list) {
const value = extractPrimaryKey(item, identityField);
if (value) {
return value;
}
}
}
if (Array.isArray(data.items)) {
for (const item of data.items) {
const value = extractPrimaryKey(item, identityField);
if (value) {
return value;
}
}
}
}
return null;
}