From 1ec78036d319322a9d4428a75b33031b1ca2adf7 Mon Sep 17 00:00:00 2001 From: Khafra <42794878+KhafraDev@users.noreply.github.com> Date: Mon, 4 Jul 2022 23:02:00 -0400 Subject: [PATCH] fix(fetch): do not assign default value to `RequestInit.method` (#1529) --- lib/fetch/index.js | 2 +- lib/fetch/request.js | 3 +-- test/fetch/client-fetch.js | 21 +++++++++++++++++++++ 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/lib/fetch/index.js b/lib/fetch/index.js index be923fe2cdb..cf91a5d378e 100644 --- a/lib/fetch/index.js +++ b/lib/fetch/index.js @@ -95,7 +95,7 @@ class Fetch extends EE { } // https://fetch.spec.whatwg.org/#fetch-method -async function fetch (input, init = undefined) { +async function fetch (input, init = {}) { if (arguments.length < 1) { throw new TypeError( `Failed to execute 'fetch' on 'Window': 1 argument required, but only ${arguments.length} present.` diff --git a/lib/fetch/request.js b/lib/fetch/request.js index 12c2fb050e5..7e1b3d8eb1d 100644 --- a/lib/fetch/request.js +++ b/lib/fetch/request.js @@ -843,8 +843,7 @@ webidl.converters.AbortSignal = webidl.interfaceConverter( webidl.converters.RequestInit = webidl.dictionaryConverter([ { key: 'method', - converter: webidl.converters.ByteString, - defaultValue: 'GET' + converter: webidl.converters.ByteString }, { key: 'headers', diff --git a/test/fetch/client-fetch.js b/test/fetch/client-fetch.js index beb25e91bad..0b3453ee1e0 100644 --- a/test/fetch/client-fetch.js +++ b/test/fetch/client-fetch.js @@ -9,6 +9,7 @@ const { Blob } = require('buffer') const { fetch, Response, Request, FormData, File } = require('../..') const { Client, setGlobalDispatcher, Agent } = require('../..') const nodeFetch = require('../../index-fetch') +const { once } = require('events') setGlobalDispatcher(new Agent({ keepAliveTimeout: 1, @@ -419,3 +420,23 @@ test('error on redirect', async (t) => { t.equal(errorCause.message, 'unexpected redirect') }) }) + +// https://github.com/nodejs/undici/issues/1527 +test('fetching with Request object - issue #1527', async (t) => { + const server = createServer((req, res) => { + t.pass() + res.end() + }).listen(0) + + t.teardown(server.close.bind(server)) + await once(server, 'listening') + + const body = JSON.stringify({ foo: 'bar' }) + const request = new Request(`http://localhost:${server.address().port}`, { + method: 'POST', + body + }) + + await t.resolves(fetch(request)) + t.end() +})