/express-simple-stats

Easily count requests coming to your express.js routes. Use it for simple analytics.

Primary LanguageTypeScript

Express Simple Stats

Easily count requests coming to your API routes.

How does it work?

The middleware maintains a sqlite database in the file system where the following data is stored.

Type Route Status Count
GET / 200 502
POST /api/signup 200 117
GET /blog/:id 200 400

Usage

import * as express from "express";
const app = express();

import { Stats } from "express-simple-stats";

/* A passowrd is provided while intializing the library. 
 * It will be used to authenticate request to get data.
 */
const stats = Stats("123456789");

/* POST request to get data will be made at this endpoint. */
app.use("/stats", stats.router);

/* All the routes created before adding this
 * middleware will not be counted.
 */
app.use(stats.middleware);

app.get("/", (req, res) => {
  res.send("Hello world");
});

app.listen(5000, () => {
  console.log("Listening");
});

How to view the data?

1. POST request to an exposed endpoint

For example, in the above code /stats is exposed as an endpoint. A POST request to this endpoint with the correct password will return the stats as JSON.

Request
curl --location --request POST 'http://localhost:5000/stats/' \
--header 'Content-Type: application/json' \
--data-raw '{
    "pwd": "123456789"
}'
Sample Response
[
    {
        "type": "GET",
        "route": "/",
        "status": 200,
        "count": 2
    },
    {
        "type": "GET",
        "route": "unknown route",
        "status": 404,
        "count": 2
    },
    {
        "type": "GET",
        "route": "/",
        "status": 304,
        "count": 1
    }
]
Note:
  1. The endpoint to view the data is configurable.
  2. The password is set while intializing the library.

2. Log the data

(async function() {
  const data = await stats.getDataAsJSON();
  console.log(data);
})();