'use strict'; /** * 使用 msg.crudFlow.create 配置创建请求;若未提供则保持旧有注入负载。 */ return configureCreateRequest(msg, node); function configureCreateRequest(message, node) { if (!message.crudFlow || !message.crudFlow.create) { return message; } const create = message.crudFlow.create; const baseUrl = message.crudFlow.baseUrl || ''; const payload = selectCreatePayload(create); message.method = (create.method || 'POST').toUpperCase(); message.url = mergeUrl(baseUrl, create.path || ''); message.headers = Object.assign({}, message.crudFlow.headers || {}, create.headers || {}); if (payload !== undefined) { message.payload = clone(payload); } else if (message.payload !== undefined) { delete message.payload; } const identityField = message.crudFlow.identityField || message.identityField || 'dsid'; const keyValue = payload && typeof payload === 'object' ? extractPrimaryKey(payload, identityField) : undefined; if (keyValue !== undefined) { message.primaryKeyValue = keyValue; message.crudFlow.delete = message.crudFlow.delete || {}; message.crudFlow.delete.actualKey = keyValue; } return message; } function selectCreatePayload(create) { if (create.payload && Object.keys(create.payload).length > 0) { return create.payload; } if (create.samplePayload) { return create.samplePayload; } return undefined; } function extractPrimaryKey(payload, identityField) { if (!payload) { return undefined; } if (Object.prototype.hasOwnProperty.call(payload, identityField)) { return payload[identityField]; } if (Array.isArray(payload.data) && payload.data.length > 0 && payload.data[0][identityField] !== undefined) { return payload.data[0][identityField]; } return undefined; } function mergeUrl(base, path) { const prefix = (base || '').replace(/\/+$/, ''); const suffix = (path || '').replace(/^\/+/, ''); if (!prefix) { return `/${suffix}`; } if (!suffix) { return prefix; } return `${prefix}/${suffix}`; } function clone(value) { return value == null ? value : JSON.parse(JSON.stringify(value)); }