138 lines
3.4 KiB
Markdown
138 lines
3.4 KiB
Markdown
# response-time
|
|
|
|
[![NPM Version][npm-image]][npm-url]
|
|
[![NPM Downloads][downloads-image]][downloads-url]
|
|
[![Build Status][travis-image]][travis-url]
|
|
[![Test Coverage][coveralls-image]][coveralls-url]
|
|
[![Gratipay][gratipay-image]][gratipay-url]
|
|
|
|
Response time for Node.js servers.
|
|
|
|
This module creates a middleware that records the response time for
|
|
requests in HTTP servers. The "response time" is defined here as the
|
|
elapsed time from when a request enters this middleware to when the
|
|
headers are written out to the client.
|
|
|
|
## Installation
|
|
|
|
```sh
|
|
$ npm install response-time
|
|
```
|
|
|
|
## API
|
|
|
|
```js
|
|
var responseTime = require('response-time')
|
|
```
|
|
|
|
### responseTime([options])
|
|
|
|
Create a middleware that adds a `X-Response-Time` header to responses. If
|
|
you don't want to use this module to automatically set a header, please
|
|
see the section about [`responseTime(fn)`](#responsetimeoptions).
|
|
|
|
#### Options
|
|
|
|
The `responseTime` function accepts an optional `options` object that may
|
|
contain any of the following keys:
|
|
|
|
##### digits
|
|
|
|
The fixed number of digits to include in the output, which is always in
|
|
milliseconds, defaults to `3` (ex: `2.300ms`).
|
|
|
|
##### header
|
|
|
|
The name of the header to set, defaults to `X-Response-Time`.
|
|
|
|
##### suffix
|
|
|
|
Boolean to indicate if units of measurement suffix should be added to
|
|
the output, defaults to `true` (ex: `2.300ms` vs `2.300`).
|
|
|
|
### responseTime(fn)
|
|
|
|
Create a new middleware that records the response time of a request and
|
|
makes this available to your own function `fn`. The `fn` argument will be
|
|
invoked as `fn(req, res, time)`, where `time` is a number in milliseconds.
|
|
|
|
## Examples
|
|
|
|
### express/connect
|
|
|
|
```js
|
|
var express = require('express')
|
|
var responseTime = require('response-time')
|
|
|
|
var app = express()
|
|
|
|
app.use(responseTime())
|
|
|
|
app.get('/', function (req, res) {
|
|
res.send('hello, world!')
|
|
})
|
|
```
|
|
|
|
### vanilla http server
|
|
|
|
```js
|
|
var finalhandler = require('finalhandler')
|
|
var http = require('http')
|
|
var responseTime = require('response-time')
|
|
|
|
// create "middleware"
|
|
var _responseTime = responseTime()
|
|
|
|
http.createServer(function (req, res) {
|
|
var done = finalhandler(req, res)
|
|
_responseTime(req, res, function (err) {
|
|
if (err) return done(err)
|
|
|
|
// respond to request
|
|
res.setHeader('content-type', 'text/plain')
|
|
res.end('hello, world!')
|
|
})
|
|
})
|
|
```
|
|
|
|
### response time metrics
|
|
|
|
```js
|
|
var express = require('express')
|
|
var responseTime = require('response-time')
|
|
var StatsD = require('node-statsd')
|
|
|
|
var app = express()
|
|
var stats = new StatsD()
|
|
|
|
stats.socket.on('error', function (error) {
|
|
console.error(error.stack)
|
|
})
|
|
|
|
app.use(responseTime(function (req, res, time) {
|
|
var stat = (req.method + req.url).toLowerCase()
|
|
.replace(/[:\.]/g, '')
|
|
.replace(/\//g, '_')
|
|
stats.timing(stat, time)
|
|
}))
|
|
|
|
app.get('/', function (req, res) {
|
|
res.send('hello, world!')
|
|
})
|
|
```
|
|
|
|
## License
|
|
|
|
[MIT](LICENSE)
|
|
|
|
[npm-image]: https://img.shields.io/npm/v/response-time.svg
|
|
[npm-url]: https://npmjs.org/package/response-time
|
|
[travis-image]: https://img.shields.io/travis/expressjs/response-time/master.svg
|
|
[travis-url]: https://travis-ci.org/expressjs/response-time
|
|
[coveralls-image]: https://img.shields.io/coveralls/expressjs/response-time/master.svg
|
|
[coveralls-url]: https://coveralls.io/r/expressjs/response-time?branch=master
|
|
[downloads-image]: https://img.shields.io/npm/dm/response-time.svg
|
|
[downloads-url]: https://npmjs.org/package/response-time
|
|
[gratipay-image]: https://img.shields.io/gratipay/dougwilson.svg
|
|
[gratipay-url]: https://www.gratipay.com/dougwilson/
|