node-red/compiliance-js/flow1-compose-delete-request.js
ruoyunbai d9b08c89ee js
2025-11-17 10:55:25 +08:00

79 lines
2.3 KiB
JavaScript

'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));
}