'use strict'; /** * 依据 msg.crudFlow.delete 生成删除请求体,支持占位符 {{primaryKey}}。 */ return configureDeleteRequest(msg, node); function configureDeleteRequest(message, node) { if (!message.crudFlow || !message.crudFlow.delete) { return message; } const del = message.crudFlow.delete; const baseUrl = message.crudFlow.baseUrl || ''; const primaryKeyValue = del.actualKey || message.primaryKeyValue || del.primaryKey || 'testid2'; const method = (del.method || 'POST').toUpperCase(); let path = del.path || ''; let payload = null; if (method === 'DELETE' && path.includes('{')) { path = path.replace(/\{[^}]+\}/g, encodeURIComponent(primaryKeyValue)); } else { const template = del.payloadTemplate || { version: '1.0.0', data: ['{{primaryKey}}'] }; payload = materialiseTemplate(template, primaryKeyValue); } message.method = method; message.url = mergeUrl(baseUrl, path); message.headers = Object.assign({}, message.crudFlow.headers || {}, del.headers || {}); if (payload !== null) { message.payload = payload; } else if (message.payload !== undefined) { delete message.payload; } return message; } function materialiseTemplate(template, primaryKeyValue) { const cloned = clone(template); return replacePlaceholder(cloned, primaryKeyValue); } function replacePlaceholder(value, primaryKeyValue) { if (typeof value === 'string') { return value.replace(/\{\{\s*primaryKey\s*\}\}/g, primaryKeyValue); } if (Array.isArray(value)) { return value.map(item => replacePlaceholder(item, primaryKeyValue)); } if (value && typeof value === 'object') { const result = {}; for (const key of Object.keys(value)) { result[key] = replacePlaceholder(value[key], primaryKeyValue); } return result; } return value; } 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)); }