diff --git a/HISTORY.md b/HISTORY.md index 6ffd9a6..12450d4 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,3 +1,8 @@ +unreleased +========== + + * Change `digits` argument to an `options` argument + 2.0.1 / 2014-08-10 ================== diff --git a/README.md b/README.md index 0df4814..598ecb9 100644 --- a/README.md +++ b/README.md @@ -20,11 +20,18 @@ $ npm install response-time var responseTime = require('response-time') ``` -### responseTime(digits) +### responseTime(options) Returns middleware that adds a `X-Response-Time` header to responses. -- `digits` - the fixed number of digits to include. (default: `3`) +#### Options + +`responseTime` accepts these properties in the options object. + +##### digits + +The fixed number of digits to include in the output, which is always in +milliseconds, defaults to `3` (ex: `2.300ms`). ## Examples diff --git a/index.js b/index.js index 5b0b3d6..105568d 100644 --- a/index.js +++ b/index.js @@ -10,6 +10,7 @@ * Module dependencies */ +var deprecate = require('depd')('response-time') var onHeaders = require('on-headers') /** @@ -18,15 +19,25 @@ var onHeaders = require('on-headers') * Adds the `X-Response-Time` header displaying the response * duration in milliseconds. * - * @param {number} [digits=3] + * @param {object} [options] + * @param {number} [options.digits=3] * @return {function} * @api public */ -module.exports = function responseTime(digits) { - digits = digits === undefined - ? 3 - : digits +module.exports = function responseTime(options) { + if (typeof options === 'number') { + // back-compat single number argument + deprecate('number argument: use {digits: ' + JSON.stringify(options) + '} instead') + options = { digits: options } + } + + options = options || {} + + // response time digits + var digits = options.digits !== undefined + ? options.digits + : 3 return function responseTime(req, res, next) { var startAt = process.hrtime() diff --git a/package.json b/package.json index e972c0e..6a84d90 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "license": "MIT", "repository": "expressjs/response-time", "dependencies": { + "depd": "0.4.5", "on-headers": "~1.0.0" }, "devDependencies": { diff --git a/test/test.js b/test/test.js index 977614e..eef9bf1 100644 --- a/test/test.js +++ b/test/test.js @@ -1,3 +1,6 @@ + +process.env.NO_DEPRECATION = 'response-time' + var http = require('http'); var request = require('supertest'); var responseTime = require('..') @@ -28,6 +31,13 @@ describe('responseTime()', function () { .expect('X-Response-Time', /^[0-9]+\.[0-9]{3}ms$/, done) }) + it('should allow custom digits', function (done) { + var server = createServer(5) + request(server) + .get('/') + .expect('X-Response-Time', /^[0-9]+\.[0-9]{5}ms$/, done) + }) + it('should allow no digits', function (done) { var server = createServer(0) request(server) @@ -37,8 +47,33 @@ describe('responseTime()', function () { }) }) -function createServer(digits, fn) { - var _responseTime = responseTime(digits) +describe('responseTime(options)', function () { + describe('with "digits" option', function () { + it('should default to 3', function (done) { + var server = createServer() + request(server) + .get('/') + .expect('X-Response-Time', /^[0-9]+\.[0-9]{3}ms$/, done) + }) + + it('should allow custom digits', function (done) { + var server = createServer({ digits: 5 }) + request(server) + .get('/') + .expect('X-Response-Time', /^[0-9]+\.[0-9]{5}ms$/, done) + }) + + it('should allow no digits', function (done) { + var server = createServer({ digits: 0 }) + request(server) + .get('/') + .expect('X-Response-Time', /^[0-9]+ms$/, done) + }) + }) +}) + +function createServer(opts, fn) { + var _responseTime = responseTime(opts) return http.createServer(function (req, res) { _responseTime(req, res, function (err) { setTimeout(function () {