Skip to content

Commit 4847d0e

Browse files
jonchurchdougwilson
authored andcommitted
Deprecate string and non-integer arguments to res.status
closes #4223
1 parent c17fe05 commit 4847d0e

File tree

3 files changed

+197
-12
lines changed

3 files changed

+197
-12
lines changed

Diff for: History.md

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
unreleased
22
==========
33

4+
* Deprecate string and non-integer arguments to `res.status`
45
* Ignore `Object.prototype` values in settings through `app.set`/`app.get`
56
* Support proper 205 responses using `res.send`
67

Diff for: lib/response.js

+3
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,9 @@ var charsetRegExp = /;\s*charset\s*=/;
6464
*/
6565

6666
res.status = function status(code) {
67+
if ((typeof code === 'string' || Math.floor(code) !== code) && code > 99 && code < 1000) {
68+
deprecate('res.status(' + JSON.stringify(code) + '): use res.status(' + Math.floor(code) + ') instead')
69+
}
6770
this.statusCode = code;
6871
return this;
6972
};

Diff for: test/res.status.js

+193-12
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,202 @@
11
'use strict'
22

33
var express = require('../')
4-
, request = require('supertest');
4+
var request = require('supertest')
55

6-
describe('res', function(){
7-
describe('.status(code)', function(){
8-
it('should set the response .statusCode', function(done){
9-
var app = express();
6+
var isIoJs = process.release
7+
? process.release.name === 'io.js'
8+
: ['v1.', 'v2.', 'v3.'].indexOf(process.version.slice(0, 3)) !== -1
109

11-
app.use(function(req, res){
12-
res.status(201).end('Created');
13-
});
10+
describe('res', function () {
11+
describe('.status(code)', function () {
12+
describe('when "code" is undefined', function () {
13+
it('should raise error for invalid status code', function (done) {
14+
var app = express()
1415

15-
request(app)
16-
.get('/')
17-
.expect('Created')
18-
.expect(201, done);
16+
app.use(function (req, res) {
17+
res.status(undefined).end()
18+
})
19+
20+
request(app)
21+
.get('/')
22+
.expect(500, /Invalid status code/, function (err) {
23+
if (isIoJs) {
24+
done(err ? null : new Error('expected error'))
25+
} else {
26+
done(err)
27+
}
28+
})
29+
})
30+
})
31+
32+
describe('when "code" is null', function () {
33+
it('should raise error for invalid status code', function (done) {
34+
var app = express()
35+
36+
app.use(function (req, res) {
37+
res.status(null).end()
38+
})
39+
40+
request(app)
41+
.get('/')
42+
.expect(500, /Invalid status code/, function (err) {
43+
if (isIoJs) {
44+
done(err ? null : new Error('expected error'))
45+
} else {
46+
done(err)
47+
}
48+
})
49+
})
50+
})
51+
52+
describe('when "code" is 201', function () {
53+
it('should set the response status code to 201', function (done) {
54+
var app = express()
55+
56+
app.use(function (req, res) {
57+
res.status(201).end()
58+
})
59+
60+
request(app)
61+
.get('/')
62+
.expect(201, done)
63+
})
64+
})
65+
66+
describe('when "code" is 302', function () {
67+
it('should set the response status code to 302', function (done) {
68+
var app = express()
69+
70+
app.use(function (req, res) {
71+
res.status(302).end()
72+
})
73+
74+
request(app)
75+
.get('/')
76+
.expect(302, done)
77+
})
78+
})
79+
80+
describe('when "code" is 403', function () {
81+
it('should set the response status code to 403', function (done) {
82+
var app = express()
83+
84+
app.use(function (req, res) {
85+
res.status(403).end()
86+
})
87+
88+
request(app)
89+
.get('/')
90+
.expect(403, done)
91+
})
92+
})
93+
94+
describe('when "code" is 501', function () {
95+
it('should set the response status code to 501', function (done) {
96+
var app = express()
97+
98+
app.use(function (req, res) {
99+
res.status(501).end()
100+
})
101+
102+
request(app)
103+
.get('/')
104+
.expect(501, done)
105+
})
106+
})
107+
108+
describe('when "code" is "410"', function () {
109+
it('should set the response status code to 410', function (done) {
110+
var app = express()
111+
112+
app.use(function (req, res) {
113+
res.status('410').end()
114+
})
115+
116+
request(app)
117+
.get('/')
118+
.expect(410, done)
119+
})
120+
})
121+
122+
describe('when "code" is 410.1', function () {
123+
it('should set the response status code to 410', function (done) {
124+
var app = express()
125+
126+
app.use(function (req, res) {
127+
res.status(410.1).end()
128+
})
129+
130+
request(app)
131+
.get('/')
132+
.expect(410, function (err) {
133+
if (isIoJs) {
134+
done(err ? null : new Error('expected error'))
135+
} else {
136+
done(err)
137+
}
138+
})
139+
})
140+
})
141+
142+
describe('when "code" is 1000', function () {
143+
it('should raise error for invalid status code', function (done) {
144+
var app = express()
145+
146+
app.use(function (req, res) {
147+
res.status(1000).end()
148+
})
149+
150+
request(app)
151+
.get('/')
152+
.expect(500, /Invalid status code/, function (err) {
153+
if (isIoJs) {
154+
done(err ? null : new Error('expected error'))
155+
} else {
156+
done(err)
157+
}
158+
})
159+
})
160+
})
161+
162+
describe('when "code" is 99', function () {
163+
it('should raise error for invalid status code', function (done) {
164+
var app = express()
165+
166+
app.use(function (req, res) {
167+
res.status(99).end()
168+
})
169+
170+
request(app)
171+
.get('/')
172+
.expect(500, /Invalid status code/, function (err) {
173+
if (isIoJs) {
174+
done(err ? null : new Error('expected error'))
175+
} else {
176+
done(err)
177+
}
178+
})
179+
})
180+
})
181+
182+
describe('when "code" is -401', function () {
183+
it('should raise error for invalid status code', function (done) {
184+
var app = express()
185+
186+
app.use(function (req, res) {
187+
res.status(-401).end()
188+
})
189+
190+
request(app)
191+
.get('/')
192+
.expect(500, /Invalid status code/, function (err) {
193+
if (isIoJs) {
194+
done(err ? null : new Error('expected error'))
195+
} else {
196+
done(err)
197+
}
198+
})
199+
})
19200
})
20201
})
21202
})

0 commit comments

Comments
 (0)