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