Express
v4 / v5The most popular Node.js framework, done in one line.
Drop-in middleware for Express 4 and 5. Attaches to `app.use()` — every route is automatically observed with zero code changes.
Install
bash
npm install auto-api-observeQuick Start
The minimal setup — import, configure, and you're observing.
express-quick-start.js
const express = require('express');
const observe = require('auto-api-observe');
const app = express();
app.use(observe({
apiKey: process.env.APILENS_KEY,
}));
app.get('/users', (req, res) => res.json({ users: [] }));
app.listen(3000);Full Example
All available options with custom fields and real-world usage.
express-full.js
const express = require('express');
const { addField } = require('auto-api-observe');
const observe = require('auto-api-observe');
const app = express();
app.use(express.json());
app.use(observe({
apiKey: process.env.APILENS_KEY,
slowThreshold: 800,
skipRoutes: ['/health', '/ping'],
tags: { service: 'user-api', env: process.env.NODE_ENV },
processMetrics: 30_000,
captureUnhandledErrors: true,
autoInstrumentOutbound: true,
onResponse: (entry) => {
if (entry.slow) console.warn('Slow request', entry.route, entry.latency);
},
}));
app.get('/users/:id', async (req, res) => {
addField('userId', req.params.id);
const user = await db.query('SELECT * FROM users WHERE id = $1', [req.params.id]);
res.json(user.rows[0]);
});
app.listen(3000, () => console.log('Listening on :3000'));What's Tracked Automatically
- Route pattern (e.g. /users/:id not /users/42)
- HTTP method, status code, latency
- Client IP (respects x-forwarded-for)
- User-Agent header
- request-size / response-size via Content-Length
- DB queries via auto-instrumentation
- Outbound HTTP calls (fetch / axios / undici)
Options Reference
| Option | Type | Default |
|---|---|---|
| apiKey | string | — |
| slowThreshold | number | 1000 |
| skipRoutes | string[] | [] |
| tags | Record | {} |
| sampleRate | number | 1.0 |
| processMetrics | number | false | 30000 |
| captureUnhandledErrors | boolean | false |
| autoInstrumentOutbound | boolean | true |
| logger | function|false | console.log |
| onRequest | function | — |
| onResponse | function | — |
Custom Fields
Attach any business context to the current request via AsyncLocalStorage — scoped per request, works the same on every framework.
const { addField } = require('auto-api-observe');
// In any route handler:
addField('userId', req.user.id);
addField('plan', req.user.plan);
addField('country', req.headers['cf-ipcountry']);
// Sensitive keys are auto-redacted before shipping:
addField('authorization', token); // → "[REDACTED]"
addField('password', pass); // → "[REDACTED]"Ready to observe your Express app?
Sign up free — get your API key in under 30 seconds. No credit card required.
Get your free API key