To gauge the performance of our apps, we need to measure the response time of our API.
To do this with our Express app, we can use the response-time
package.
Installation
response-time
is available as a Node package. We can install it by running:
npm install response-time
Then we can import it by writing:
const responseTime = require('response-time');
responseTime([options])
We can set various options by passing an object into the optional options
parameter.
It’ll create a middleware that adds a X-Response-Time
header to responses.
The options
object takes the following properties:
digits
The digits
property is a fixed number of digits to include in the output, which is always in milliseconds. The default is 3.
header
The name of the header to be set. It defaults to X-Response-Time
.
suffix
The suffix
property is a boolean property to indicate if units of measure should be added to the output. The default value is true
.
responseTime(fn)
The function creates a middleware that records the response time of a request and makes it available to our own function fn
. fn
has the signature (req, res, time)
where time
is a number in milliseconds.
Examples
Simple Example
We can use the responseTime
package without any options or function passed in:
const express = require('express');
const bodyParser = require('body-parser');
const responseTime = require('response-time')
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(responseTime());
app.get('/', (req, res) => {
res.send('foo');
});
app.listen(3000);
Then we get a X-Response-Time
response header with a value like 0.587ms.
We can check the response header on an HTTP client like Postman.
Passing in Options
We can change the options for the header returned with the response. For example, we can write the following to change the number of digits sent:
const express = require('express');
const bodyParser = require('body-parser');
const responseTime = require('response-time')
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(responseTime({
digits: 5
}))
app.get('/', (req, res) => {
req.id = 1;
res.send('foo');
});
app.listen(3000);
Then we get a X-Response-Time
response header with a value like 0.71987ms.
Passing in Our Own Function
We can pass a function into the responseTime
function as follows:
const express = require('express');
const bodyParser = require('body-parser');
const responseTime = require('response-time')
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(responseTime((req, res, time) => {
console.log(`${req.method} ${req.url} ${time}`);
}))
app.get('/', (req, res) => {
req.id = 1;
res.send('foo');
});
app.listen(3000);
Then we get something like:
GET / 2.9935419999999997
from the console.log
.
It’s useful if we want to manipulate the response time data or log it ourselves.
Conclusion
We can get the response time in the response header of a request with the response-time
package.
It has a responseTime
function which returns a middleware that we can use with the use
method of express
or express.Router()
.
The function can either take an options
object and or a function with the req
, res
, and time
parameters to get the request, response, and response time respectively.