req: Fix bug where it would call requestEnded when request was closed. This behavior is normal during the middle of a request
All checks were successful
continuous-integration/appveyor/branch AppVeyor build succeeded

This commit is contained in:
Jonatan Nilsson 2022-04-07 11:27:44 +00:00
parent cffca53eb6
commit 4820347cfb
4 changed files with 31 additions and 10 deletions

View file

@ -833,11 +833,6 @@ ctx.state.nonce = nonce;
this._onreserror(err, ctx) this._onreserror(err, ctx)
}) })
req.on('close', () => {
ctx.closed = true
this.requestEnded(ctx)
})
res.on('finish', () => { res.on('finish', () => {
this.requestEnded(ctx) this.requestEnded(ctx)
}) })

View file

@ -1,6 +1,6 @@
{ {
"name": "flaska", "name": "flaska",
"version": "1.2.2", "version": "1.2.3",
"description": "Flaska is a micro web-framework for node. It is designed to be fast, simple and lightweight, and is distributed as a single file module with no dependencies.", "description": "Flaska is a micro web-framework for node. It is designed to be fast, simple and lightweight, and is distributed as a single file module with no dependencies.",
"main": "flaska.mjs", "main": "flaska.mjs",
"scripts": { "scripts": {

View file

@ -22,7 +22,7 @@ t.describe('#requestStart()', function() {
flaska.requestEnd = function(err, ctx) { flaska.requestEnd = function(err, ctx) {
try { try {
assert.ok(err) assert.ok(err)
assert.strictEqual(assertReq.on.callCount, 2) assert.strictEqual(assertReq.on.callCount, 1)
assert.strictEqual(assertRes.on.callCount, 2) assert.strictEqual(assertRes.on.callCount, 2)
@ -47,9 +47,6 @@ t.describe('#requestStart()', function() {
assert.strictEqual(onReqError.firstCall[0], assertErrorOne) assert.strictEqual(onReqError.firstCall[0], assertErrorOne)
assert.strictEqual(onReqError.firstCall[1], ctx) assert.strictEqual(onReqError.firstCall[1], ctx)
assert.strictEqual(assertReq.on.secondCall[0], 'close')
assert.strictEqual(typeof(assertReq.on.secondCall[1]), 'function')
// Test abort and close // Test abort and close
cb() cb()

View file

@ -24,6 +24,11 @@ let reqBody = null
let file = null let file = null
let uploaded = [] let uploaded = []
flaska.after(function(ctx) {
if (ctx.aborted) return
ctx.log.info(ctx.status)
})
flaska.get('/', function(ctx) { flaska.get('/', function(ctx) {
ctx.body = { status: true } ctx.body = { status: true }
}) })
@ -31,6 +36,12 @@ flaska.post('/json', JsonHandler(), function(ctx) {
ctx.body = { success: true } ctx.body = { success: true }
reqBody = ctx.req.body reqBody = ctx.req.body
}) })
flaska.post('/json/slow', JsonHandler(), async function(ctx) {
await setTimeout(300)
ctx.body = { success: true }
ctx.status = 201
reqBody = ctx.req.body
})
flaska.get('/timeout', function(ctx) { flaska.get('/timeout', function(ctx) {
return new Promise(function() {}) return new Promise(function() {})
}) })
@ -79,6 +90,9 @@ t.describe('/', function() {
}) })
t.describe('/json', function() { t.describe('/json', function() {
t.beforeEach(function() {
log.info.reset()
})
t.test('should return success and store body', async function() { t.test('should return success and store body', async function() {
const assertBody = { a: '' } const assertBody = { a: '' }
for (let i = 0; i < 1010; i++) { for (let i = 0; i < 1010; i++) {
@ -88,6 +102,21 @@ t.describe('/json', function() {
let body = await client.post('/json', assertBody) let body = await client.post('/json', assertBody)
assert.deepEqual(body, { success: true }) assert.deepEqual(body, { success: true })
assert.deepStrictEqual(reqBody, assertBody) assert.deepStrictEqual(reqBody, assertBody)
assert.strictEqual(log.info.callCount, 1)
assert.strictEqual(log.info.firstCall[0], 200)
})
t.test('should return and log correctly', async function() {
const assertBody = { a: '' }
for (let i = 0; i < 1010; i++) {
assertBody.a += 'aaaaaaaaaa'
}
reqBody = null
let body = await client.post('/json/slow', assertBody)
assert.deepEqual(body, { success: true })
assert.deepStrictEqual(reqBody, assertBody)
assert.strictEqual(log.info.callCount, 1)
assert.strictEqual(log.info.firstCall[0], 201)
}) })
t.test('should fail if body is too big', async function() { t.test('should fail if body is too big', async function() {