fix(HTTP Request Node): Duplicate key names support for form data (#9040)

Co-authored-by: Marcus <marcus@n8n.io>
This commit is contained in:
Michael Kret 2024-04-10 11:09:20 +03:00 committed by GitHub
parent 58518b684b
commit 3e231dbfe6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 26 additions and 3 deletions

View file

@ -7,7 +7,13 @@ import type {
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 = {
[key: string]: string[];
@ -168,6 +174,22 @@ export const prepareRequestBody = async (
set(result, entry.name, entry.value);
return result;
}, 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 {
return await reduceAsync(parameters, defaultReducer);
}

View file

@ -14,7 +14,7 @@ export class HttpRequest extends VersionedNodeType {
group: ['output'],
subtitle: '={{$parameter["requestMethod"] + ": " + $parameter["url"]}}',
description: 'Makes an HTTP request and returns the response data',
defaultVersion: 4.1,
defaultVersion: 4.2,
};
const nodeVersions: IVersionedNodeType['nodeVersions'] = {
@ -23,6 +23,7 @@ export class HttpRequest extends VersionedNodeType {
3: new HttpRequestV3(baseDescription),
4: new HttpRequestV3(baseDescription),
4.1: new HttpRequestV3(baseDescription),
4.2: new HttpRequestV3(baseDescription),
};
super(nodeVersions, baseDescription);

View file

@ -49,7 +49,7 @@ export class HttpRequestV3 implements INodeType {
this.description = {
...baseDescription,
subtitle: '={{$parameter["method"] + ": " + $parameter["url"]}}',
version: [3, 4, 4.1],
version: [3, 4, 4.1, 4.2],
defaults: {
name: 'HTTP Request',
color: '#0004F5',