From 2307137b5275b41f6efe1c7f8720bbaa64136627 Mon Sep 17 00:00:00 2001 From: Khafra <42794878+KhafraDev@users.noreply.github.com> Date: Wed, 4 May 2022 02:48:06 -0400 Subject: [PATCH] fix(Request): URLSearchParams body w/ Headers obj (#1410) --- lib/fetch/request.js | 4 ++-- test/fetch/request.js | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/lib/fetch/request.js b/lib/fetch/request.js index 24210e59044..37f7c0c969f 100644 --- a/lib/fetch/request.js +++ b/lib/fetch/request.js @@ -467,8 +467,8 @@ class Request { // not contain `Content-Type`, then append `Content-Type`/Content-Type to // this’s headers. if (contentType && !this[kHeaders].has('content-type')) { - this[kHeaders].append('content-type', contentType) - this[kState].headersList.append('content-type', contentType) + this[kHeaders].set('content-type', contentType) + this[kState].headersList.set('content-type', contentType) } } diff --git a/test/fetch/request.js b/test/fetch/request.js index 5c84f754150..e37b395258f 100644 --- a/test/fetch/request.js +++ b/test/fetch/request.js @@ -7,6 +7,7 @@ const { Request } = require('../../') const { kState } = require('../../lib/fetch/symbols.js') +const { URLSearchParams } = require('url') test('arg validation', (t) => { // constructor @@ -261,6 +262,27 @@ test('pre aborted signal cloned', t => { t.end() }) +test('URLSearchParams body with Headers object - issue #1407', async (t) => { + const body = new URLSearchParams({ + abc: 123 + }) + + const request = new Request( + 'http://localhost', + { + method: 'POST', + body, + headers: { + Authorization: 'test' + } + } + ) + + t.equal(request.headers.get('content-type'), 'application/x-www-form-urlencoded;charset=UTF-8') + t.equal(request.headers.get('authorization'), 'test') + t.equal(await request.text(), 'abc=123') +}) + test('post aborted signal cloned', t => { t.plan(2)