mirror of
https://github.com/n8n-io/n8n.git
synced 2025-03-05 20:50:17 -08:00
fix(HTTP Request Node): Duplicate key names support for form data (#9040)
Co-authored-by: Marcus <marcus@n8n.io>
This commit is contained in:
parent
58518b684b
commit
3e231dbfe6
|
@ -7,7 +7,13 @@ import type {
|
||||||
|
|
||||||
import set from 'lodash/set';
|
import set from 'lodash/set';
|
||||||
|
|
||||||
export type BodyParameter = { name: string; value: string };
|
import FormData from 'form-data';
|
||||||
|
|
||||||
|
export type BodyParameter = {
|
||||||
|
name: string;
|
||||||
|
value: string;
|
||||||
|
parameterType?: 'formBinaryData' | 'formData';
|
||||||
|
};
|
||||||
|
|
||||||
export type IAuthDataSanitizeKeys = {
|
export type IAuthDataSanitizeKeys = {
|
||||||
[key: string]: string[];
|
[key: string]: string[];
|
||||||
|
@ -168,6 +174,22 @@ export const prepareRequestBody = async (
|
||||||
set(result, entry.name, entry.value);
|
set(result, entry.name, entry.value);
|
||||||
return result;
|
return result;
|
||||||
}, Promise.resolve({}));
|
}, Promise.resolve({}));
|
||||||
|
} else if (bodyType === 'multipart-form-data' && version >= 4.2) {
|
||||||
|
const formData = new FormData();
|
||||||
|
|
||||||
|
for (const parameter of parameters) {
|
||||||
|
if (parameter.parameterType === 'formBinaryData') {
|
||||||
|
const entry = await defaultReducer({}, parameter);
|
||||||
|
const key = Object.keys(entry)[0];
|
||||||
|
const data = entry[key] as { value: Buffer; options: FormData.AppendOptions };
|
||||||
|
formData.append(key, data.value, data.options);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
formData.append(parameter.name, parameter.value);
|
||||||
|
}
|
||||||
|
|
||||||
|
return formData;
|
||||||
} else {
|
} else {
|
||||||
return await reduceAsync(parameters, defaultReducer);
|
return await reduceAsync(parameters, defaultReducer);
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,7 @@ export class HttpRequest extends VersionedNodeType {
|
||||||
group: ['output'],
|
group: ['output'],
|
||||||
subtitle: '={{$parameter["requestMethod"] + ": " + $parameter["url"]}}',
|
subtitle: '={{$parameter["requestMethod"] + ": " + $parameter["url"]}}',
|
||||||
description: 'Makes an HTTP request and returns the response data',
|
description: 'Makes an HTTP request and returns the response data',
|
||||||
defaultVersion: 4.1,
|
defaultVersion: 4.2,
|
||||||
};
|
};
|
||||||
|
|
||||||
const nodeVersions: IVersionedNodeType['nodeVersions'] = {
|
const nodeVersions: IVersionedNodeType['nodeVersions'] = {
|
||||||
|
@ -23,6 +23,7 @@ export class HttpRequest extends VersionedNodeType {
|
||||||
3: new HttpRequestV3(baseDescription),
|
3: new HttpRequestV3(baseDescription),
|
||||||
4: new HttpRequestV3(baseDescription),
|
4: new HttpRequestV3(baseDescription),
|
||||||
4.1: new HttpRequestV3(baseDescription),
|
4.1: new HttpRequestV3(baseDescription),
|
||||||
|
4.2: new HttpRequestV3(baseDescription),
|
||||||
};
|
};
|
||||||
|
|
||||||
super(nodeVersions, baseDescription);
|
super(nodeVersions, baseDescription);
|
||||||
|
|
|
@ -49,7 +49,7 @@ export class HttpRequestV3 implements INodeType {
|
||||||
this.description = {
|
this.description = {
|
||||||
...baseDescription,
|
...baseDescription,
|
||||||
subtitle: '={{$parameter["method"] + ": " + $parameter["url"]}}',
|
subtitle: '={{$parameter["method"] + ": " + $parameter["url"]}}',
|
||||||
version: [3, 4, 4.1],
|
version: [3, 4, 4.1, 4.2],
|
||||||
defaults: {
|
defaults: {
|
||||||
name: 'HTTP Request',
|
name: 'HTTP Request',
|
||||||
color: '#0004F5',
|
color: '#0004F5',
|
||||||
|
|
Loading…
Reference in a new issue