Skip to content

Commit fca3334

Browse files
committed
fix: prevent to cache after res is written
1 parent 3eeed24 commit fca3334

2 files changed

Lines changed: 22 additions & 2 deletions

File tree

src/index.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ const Keyv = require('@keyvhq/core')
77
const assert = require('assert')
88
const getEtag = require('etag')
99

10-
const { size, isFunction, hasQueryParameter, setHeaders } = require('./util')
10+
const { hasQueryParameter, isFunction, setHeaders, size } = require('./util')
1111

1212
const cacheableResponse = ({
1313
bypassQueryParameter = 'force',
@@ -45,9 +45,10 @@ const cacheableResponse = ({
4545
return async opts => {
4646
const { req, res } = opts
4747
const hasForce = hasQueryParameter(req, bypassQueryParameter)
48-
4948
const [raw, { hasValue, key, isExpired, isStale }] = await memoGet(opts)
5049

50+
if (res.finished) return
51+
5152
const result = (await decompress(raw)) || {}
5253
const isHit = !hasForce && !isExpired && hasValue
5354

test/index.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,25 @@ test('compress support', async t => {
5454
t.is(headersOne.etag, headersTwo.etag)
5555
})
5656

57+
test('exit early is get is empty', async t => {
58+
let isEnd = false
59+
60+
const end = (res, msg) => {
61+
isEnd = true
62+
res.end(msg)
63+
}
64+
65+
const url = await createServer(
66+
cacheableResponse({
67+
get: ({ res }) => !isEnd && end(res, 'get'),
68+
send: ({ res }) => !isEnd && end(res, 'send')
69+
})
70+
)
71+
72+
const res = await got(`${url}/kikobeats`)
73+
t.is(res.body, 'get')
74+
})
75+
5776
test('prevent send if data is undefined', async t => {
5877
let isSendCalled = false
5978
const url = await createServer(

0 commit comments

Comments
 (0)