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