diff --git a/index.js b/index.js index 5673507..6d4856b 100644 --- a/index.js +++ b/index.js @@ -19,6 +19,13 @@ var parseUrl = require('parseurl') var statuses = require('statuses') var unpipe = require('unpipe') +var http2 +try { + http2 = require('http2') +} catch (e) { + http2 = null +} + /** * Module variables. * @private @@ -276,7 +283,9 @@ function send (req, res, status, headers, message) { // response status res.statusCode = status - res.statusMessage = statuses[status] + if (!isHTTP2Response(res)) { + res.statusMessage = statuses[status] + } // response headers setHeaders(res, headers) @@ -329,3 +338,14 @@ function setHeaders (res, headers) { res.setHeader(key, headers[key]) } } + +/** + * Check if a response object is HTTP2. + * + * @param {OutgoingMessage|Http2ServerResponse} res + * @private + */ + +function isHTTP2Response (res) { + return http2 && res instanceof http2.Http2ServerResponse +} diff --git a/test/test.js b/test/test.js index 573e52b..4d4872d 100644 --- a/test/test.js +++ b/test/test.js @@ -513,3 +513,33 @@ describe('finalhandler(req, res)', function () { }) }) }) + +describe('HTTP2', function () { + it('should not set statusMessage for HTTP2 response', function (done) { + var http2 + try { + http2 = require('http2') + } catch (e) { + return done() + } + + process.once('warning', function (warning) { + assert.fail(warning) + }) + + var server = http2.createServer(function (req, res) { + var done = finalhandler(req, res) + done() + }) + + server.listen(function () { + var address = server.address() + var client = http2.connect('http://localhost:' + address.port) + client.request({ ':path': '/' }).on('response', function () { + client.close() + server.close() + done() + }) + }) + }) +})