85 lines
2.3 KiB
JavaScript
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;
|
|
}
|