Skip to content
Closed
6 changes: 6 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,9 @@ script:
- "test -z $(npm -ps ls eslint ) || npm run-script lint"
after_script:
- "test -e ./coverage/lcov.info && npm install coveralls@2 && cat ./coverage/lcov.info | coveralls"
matrix:
include:
- node_js: "9.5"
env: HTTP2_TEST=1
- node_js: "8.9"
env: HTTP2_TEST=1
18 changes: 17 additions & 1 deletion index.js
Original file line number Diff line number Diff line change
Expand Up @@ -84,16 +84,32 @@ function typeis (value, types_) {
* or `content-length` headers set.
* http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.3
*
* A http/2 request with DataFrame can have no `content-length` header.
* https://httpwg.org/specs/rfc7540.html
*
* @param {Object} request
* @return {Boolean}
* @public
*/

function hasbody (req) {
return req.headers['transfer-encoding'] !== undefined ||
return ishttp2(req) ||
req.headers['transfer-encoding'] !== undefined ||
!isNaN(req.headers['content-length'])
}

/**
* Check if a request is a http2 request.
*
* @param {Object} request
* @return {Boolean}
* @public
*/

function ishttp2 (req) {
return req.httpVersionMajor === 2
}

/**
* Check if the incoming request contains the "Content-Type"
* header field, and it contains any of the give mime `type`s.
Expand Down
25 changes: 21 additions & 4 deletions test/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -174,13 +174,30 @@ describe('typeis.hasBody(req)', function () {
assert.strictEqual(typeis.hasBody(req), true)
})
})

describe('http2 request', function () {
it('should indicate body', function () {
var req = {headers: {}, httpVersionMajor: 2}
assert.strictEqual(typeis.hasBody(req), true)
})
})
})

function createRequest (type) {
return {
headers: {
'content-type': type || '',
'transfer-encoding': 'chunked'
if (process.env.HTTP2_TEST) {
console.log('http2')
return {
headers: {
'content-type': type || ''
},
httpVersionMajor: 2
}
} else {
return {
headers: {
'content-type': type || '',
'transfer-encoding': 'chunked'
}
}
}
}