Skip to content

Commit 49e4c72

Browse files
committed
Fix 404 output for bad / missing pathnames
1 parent e5f7289 commit 49e4c72

4 files changed

Lines changed: 33 additions & 1 deletion

File tree

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+
* Fix 404 output for bad / missing pathnames
45
* deps: encodeurl@~1.0.2
56
- Fix encoding `%` as last character
67
* deps: statuses@~1.4.0

index.js

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ function finalhandler (req, res, options) {
112112
} else {
113113
// not found
114114
status = 404
115-
msg = 'Cannot ' + req.method + ' ' + encodeUrl(parseUrl.original(req).pathname)
115+
msg = 'Cannot ' + req.method + ' ' + encodeUrl(getResourceName(req))
116116
}
117117

118118
debug('default %s', status)
@@ -206,6 +206,25 @@ function getErrorStatusCode (err) {
206206
return undefined
207207
}
208208

209+
/**
210+
* Get resource name for the request.
211+
*
212+
* This is typically just the original pathname of the request
213+
* but will fallback to "resource" is that cannot be determined.
214+
*
215+
* @param {IncomingMessage} req
216+
* @return {string}
217+
* @private
218+
*/
219+
220+
function getResourceName (req) {
221+
try {
222+
return parseUrl.original(req).pathname
223+
} catch (e) {
224+
return 'resource'
225+
}
226+
}
227+
209228
/**
210229
* Get status code from response.
211230
*

test/support/utils.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ function rawrequest (server) {
6161
path: _path,
6262
port: port
6363
})
64+
req.on('error', callback)
6465
req.on('response', function onresponse (res) {
6566
var buf = ''
6667

test/test.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,17 @@ describe('finalhandler(req, res)', function () {
231231
.expect(404, /<pre>Cannot GET \/foo%20%C2%A7<\/pre>/, done)
232232
})
233233

234+
it('should fallback to generic pathname without URL', function (done) {
235+
var server = createServer(function (req, res, next) {
236+
req.url = undefined
237+
next()
238+
})
239+
240+
request(server)
241+
.get('/foo')
242+
.expect(404, /<pre>Cannot GET resource<\/pre>/, done)
243+
})
244+
234245
it('should include original pathname', function (done) {
235246
var server = createServer(function (req, res, next) {
236247
var parts = req.url.split('/')

0 commit comments

Comments
 (0)