Skip to content

Commit

Permalink
fix(HTTP Request Node): Duplicate key names support for form data (#9040
Browse files Browse the repository at this point in the history
)

Co-authored-by: Marcus <marcus@n8n.io>
  • Loading branch information
2 people authored and netroy committed Apr 11, 2024
1 parent 549e8f7 commit 3fb532d
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 3 deletions.
24 changes: 23 additions & 1 deletion packages/nodes-base/nodes/HttpRequest/GenericFunctions.ts
Expand Up @@ -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[];
Expand Down Expand Up @@ -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);
}
Expand Down
3 changes: 2 additions & 1 deletion packages/nodes-base/nodes/HttpRequest/HttpRequest.node.ts
Expand Up @@ -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'] = {
Expand All @@ -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);
Expand Down
Expand Up @@ -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',
Expand Down

0 comments on commit 3fb532d

Please sign in to comment.