Skip to content

Commit 646a914

Browse files
committed
Honor res.statusCode change in listener
1 parent 23d23ab commit 646a914

File tree

3 files changed

+44
-0
lines changed

3 files changed

+44
-0
lines changed

History.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
unreleased
22
==========
33

4+
* Honor `res.statusCode` change in `listener`
45
* Move to `jshttp` orgainzation
56
* Prevent `arguments`-related de-opt
67

index.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,12 @@ function createWriteHead(prevWriteHead, listener) {
4242
if (!fired) {
4343
fired = true
4444
listener.call(this)
45+
46+
// pass-along an updated status code
47+
if (typeof args[0] === 'number' && this.statusCode !== args[0]) {
48+
args[0] = this.statusCode
49+
args.length = 1
50+
}
4551
}
4652

4753
prevWriteHead.apply(this, args);

test/test.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,43 @@ describe('onHeaders(res, listener)', function () {
119119
})
120120
})
121121

122+
describe('writeHead(status)', function () {
123+
it('should make status available in listener', function (done) {
124+
var server = createServer(listener, handler)
125+
126+
function handler(req, res) {
127+
res.writeHead(201)
128+
}
129+
130+
function listener(req, res) {
131+
this.setHeader('X-Status', this.statusCode)
132+
}
133+
134+
request(server)
135+
.get('/')
136+
.expect('X-Status', '201')
137+
.expect(201, done)
138+
})
139+
140+
it('should allow manipulation of status in listener', function (done) {
141+
var server = createServer(listener, handler)
142+
143+
function handler(req, res) {
144+
res.writeHead(201)
145+
}
146+
147+
function listener(req, res) {
148+
this.setHeader('X-Status', this.statusCode)
149+
this.statusCode = 202
150+
}
151+
152+
request(server)
153+
.get('/')
154+
.expect('X-Status', '201')
155+
.expect(202, done)
156+
})
157+
})
158+
122159
describe('writeHead(status, reason)', function () {
123160
it('should be available in listener', function (done) {
124161
var server = createServer(echoListener, handler)

0 commit comments

Comments
 (0)