Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ on:
push:
branches:
- master
- 1.x
paths-ignore:
- '*.md'
pull_request:
Expand Down
5 changes: 5 additions & 0 deletions HISTORY.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
v1.3.0 / 2024-09-03
==================

* ignore status message for HTTP/2 (#53)

v1.2.1 / 2024-09-02
==================

Expand Down
5 changes: 4 additions & 1 deletion index.js
Original file line number Diff line number Diff line change
Expand Up @@ -278,7 +278,10 @@ function send (req, res, status, headers, message) {

// response status
res.statusCode = status
res.statusMessage = statuses.message[status]

if (req.httpVersionMajor < 2) {
res.statusMessage = statuses.message[status]
}

// remove any content headers
res.removeHeader('Content-Encoding')
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "finalhandler",
"description": "Node.js final http responder",
"version": "1.2.1",
"version": "1.3.0",
"author": "Douglas Christopher Wilson <[email protected]>",
"license": "MIT",
"repository": "pillarjs/finalhandler",
Expand Down
94 changes: 92 additions & 2 deletions test/support/utils.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,25 @@
var assert = require('assert')
var finalhandler = require('../..')
var http = require('http')

var http2

try {
http2 = require('http2')
} catch (_err) {
// Nothing
}

var request = require('supertest')
var SlowWriteStream = require('./sws')

exports.assert = assert
exports.createError = createError
exports.createServer = createServer
exports.createHTTPServer = createHTTPServer
exports.createHTTP2Server = createHTTP2Server
exports.createSlowWriteStream = createSlowWriteStream
exports.rawrequest = rawrequest
exports.rawrequestHTTP2 = rawrequestHTTP2
exports.request = request
exports.shouldHaveStatusMessage = shouldHaveStatusMessage
exports.shouldNotHaveBody = shouldNotHaveBody
Expand All @@ -26,7 +37,7 @@ function createError (message, props) {
return err
}

function createServer (err, opts) {
function createHTTPServer (err, opts) {
return http.createServer(function (req, res) {
var done = finalhandler(req, res, opts)

Expand All @@ -39,6 +50,19 @@ function createServer (err, opts) {
})
}

function createHTTP2Server (err, opts) {
return http2.createServer(function (req, res) {
var done = finalhandler(req, res, opts)

if (typeof err === 'function') {
err(req, res, done)
return
}

done(err)
})
}

function createSlowWriteStream () {
return new SlowWriteStream()
}
Expand Down Expand Up @@ -107,6 +131,72 @@ function rawrequest (server) {
}
}

function rawrequestHTTP2 (server) {
var _headers = {}
var _path

function expect (status, body, callback) {
if (arguments.length === 2) {
_headers[status.toLowerCase()] = body
return this
}

server.listen(function onlisten () {
var buf = ''
var resHeaders
var addr = this.address()
var port = addr.port

var client = http2.connect('http://127.0.0.1:' + port)
var req = client.request({
':method': 'GET',
':path': _path.replace(/http:\/\/localhost/, '')
})
req.on('error', callback)
req.on('response', function onresponse (responseHeaders) {
resHeaders = responseHeaders
})
req.on('data', function ondata (s) { buf += s })
req.on('end', function onend () {
var err = null

try {
for (var key in _headers) {
assert.strictEqual(resHeaders[key], _headers[key])
}

assert.strictEqual(resHeaders[':status'], status)

if (body instanceof RegExp) {
assert.ok(body.test(buf), 'expected body ' + buf + ' to match ' + body)
} else {
assert.strictEqual(buf, body, 'expected ' + body + ' response body, got ' + buf)
}
} catch (e) {
err = e
}

req.close()
client.close()
server.close()
callback(err)
})
})
}

function get (path) {
_path = path

return {
expect: expect
}
}

return {
get: get
}
}

function shouldHaveStatusMessage (statusMessage) {
return function (test) {
assert.strictEqual(test.res.statusMessage, statusMessage, 'should have statusMessage "' + statusMessage + '"')
Expand Down
Loading