diff --git a/src/Formidable.js b/src/Formidable.js index 8512f373..b777121a 100644 --- a/src/Formidable.js +++ b/src/Formidable.js @@ -201,7 +201,6 @@ class IncomingForm extends EventEmitter { if (this._parser) { this._parser.end(); } - this._maybeEnd(); }); return this; diff --git a/test/standalone/end-event-emitted-twice.test.js b/test/standalone/end-event-emitted-twice.test.js new file mode 100644 index 00000000..650f431b --- /dev/null +++ b/test/standalone/end-event-emitted-twice.test.js @@ -0,0 +1,57 @@ +import {strictEqual} from 'node:assert'; +import { createServer } from 'node:http'; +import { connect } from 'node:net'; +import formidable from '../../src/index.js'; + +const PORT = 13539; + +test('end event emitted twice', (done) => { + const server = createServer((req) => { + const form = formidable(); + + let i = 0; + form.on('end', () => { + i += 1; + strictEqual(i, 1, 'end should be emitted once'); + }); + form.parse(req, () => { + + server.close(); + strictEqual(i, 1, 'end should be emitted once'); + done(); + }); + }); + + server.listen(PORT, 'localhost', () => { + const choosenPort = server.address().port; + + const client = connect(choosenPort); + + client.write( +`POST /api/upload HTTP/1.1 +Host: localhost:${choosenPort} +User-Agent: N +Content-Type: multipart/form-data; boundary=---------------------------13068458571765726332503797717 + + +-----------------------------13068458571765726332503797717 +Content-Disposition: form-data; name="title" + +a +-----------------------------13068458571765726332503797717 +Content-Disposition: form-data; name="multipleFiles"; filename="x.txt" +Content-Type: application/x-javascript + + + +a +b +c +d + +-----------------------------13068458571765726332503797717-- +`, + ); + client.end(); + }); +}); diff --git a/test/standalone/keep-alive-error.test.js b/test/standalone/keep-alive-error.test.js index 67c4f696..18ddab48 100644 --- a/test/standalone/keep-alive-error.test.js +++ b/test/standalone/keep-alive-error.test.js @@ -64,8 +64,7 @@ test('keep alive error', (done) => { clientTwo.end(); setTimeout(() => { - // ? yup, quite true, it makes sense to be 2 - strictEqual(ok, 2, `should "ok" count === 2, has: ${ok}`); + strictEqual(ok, 1, `should "ok" count === 1, has: ${ok}`); server.close(); done();