diff --git a/lib/reply.js b/lib/reply.js index c3c3bfc7bf..45db78b96e 100644 --- a/lib/reply.js +++ b/lib/reply.js @@ -203,10 +203,8 @@ Reply.prototype.getHeaders = function () { Reply.prototype.hasHeader = function (key) { key = key.toLowerCase() - if (this[kReplyHeaders][key] !== undefined) { - return true - } - return this.raw.hasHeader(key) + + return this[kReplyHeaders][key] !== undefined || this.raw.hasHeader(key) } Reply.prototype.removeHeader = function (key) { @@ -216,25 +214,24 @@ Reply.prototype.removeHeader = function (key) { return this } -Reply.prototype.header = function (key, value) { - const _key = key.toLowerCase() - - // default the value to '' - value = value === undefined ? '' : value +Reply.prototype.header = function (key, value = '') { + key = key.toLowerCase() - if (this[kReplyHeaders][_key] && _key === 'set-cookie') { + if (this[kReplyHeaders][key] && key === 'set-cookie') { // https://tools.ietf.org/html/rfc7230#section-3.2.2 - if (typeof this[kReplyHeaders][_key] === 'string') { - this[kReplyHeaders][_key] = [this[kReplyHeaders][_key]] + if (typeof this[kReplyHeaders][key] === 'string') { + this[kReplyHeaders][key] = [this[kReplyHeaders][key]] } + if (Array.isArray(value)) { - Array.prototype.push.apply(this[kReplyHeaders][_key], value) + this[kReplyHeaders][key].push(...value) } else { - this[kReplyHeaders][_key].push(value) + this[kReplyHeaders][key].push(value) } } else { - this[kReplyHeaders][_key] = value + this[kReplyHeaders][key] = value } + return this } @@ -245,6 +242,7 @@ Reply.prototype.headers = function (headers) { const key = keys[i] this.header(key, headers[key]) } + return this } @@ -279,8 +277,7 @@ Reply.prototype.trailer = function (key, fn) { } Reply.prototype.hasTrailer = function (key) { - if (this[kReplyTrailers] === null) return false - return this[kReplyTrailers][key.toLowerCase()] !== undefined + return this[kReplyTrailers]?.[key.toLowerCase()] !== undefined } Reply.prototype.removeTrailer = function (key) { @@ -330,8 +327,7 @@ Reply.prototype.redirect = function (code, url) { code = this[kReplyHasStatusCode] ? this.raw.statusCode : 302 } - this.header('location', url).code(code).send() - return this + return this.header('location', url).code(code).send() } Reply.prototype.callNotFound = function () { @@ -485,9 +481,12 @@ function onSendEnd (reply, payload) { } if (reply[kReplyTrailers] === null) { - if (!reply[kReplyHeaders]['content-length']) { - reply[kReplyHeaders]['content-length'] = '' + Buffer.byteLength(payload) - } else if (req.raw.method !== 'HEAD' && reply[kReplyHeaders]['content-length'] !== Buffer.byteLength(payload)) { + const contentLength = reply[kReplyHeaders]['content-length'] + if (!contentLength || + (req.raw.method !== 'HEAD' && + parseInt(contentLength, 10) !== Buffer.byteLength(payload) + ) + ) { reply[kReplyHeaders]['content-length'] = '' + Buffer.byteLength(payload) } }