Express — full setup
Complete Express integration: middleware, outbound fetch, OpenAI, shutdown.
Install
bash
npm install @amlexiahq/node expressEnvironment
env
AMLEXIA_SDK_KEY=am_...
AMLEXIA_INGEST_URL=https://ingest.amlexia.com
AMLEXIA_ENVIRONMENT=productionApplication
typescript
import express from 'express';
import OpenAI from 'openai';
import { AmlexiaClient, wrapFetch, trackOpenAiCompletion } from '@amlexiahq/node';
import { AmlexiaMiddleware } from '@amlexiahq/node/express';
const client = new AmlexiaClient({
sdkKey: process.env.AMLEXIA_SDK_KEY!,
ingestUrl: process.env.AMLEXIA_INGEST_URL,
environment: process.env.AMLEXIA_ENVIRONMENT,
releaseVersion: process.env.AMLEXIA_RELEASE,
sampleRate: 1,
diagnostic: process.env.NODE_ENV !== 'production',
});
// Track outbound fetch (OpenAI, Stripe, etc.)
globalThis.fetch = wrapFetch(client, fetch);
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
const app = express();
app.use(express.json());
// Inbound API tracking
app.use(AmlexiaMiddleware(client, { serviceName: 'api' }));
app.get('/health', (_req, res) => res.json({ ok: true }));
app.get('/api/users/:id', (req, res) => {
res.json({ id: req.params.id });
});
app.post('/webhooks/stripe', async (req, res) => {
// Middleware tracks inbound; optionally add isWebhook in manual track if custom
res.sendStatus(200);
});
app.post('/api/chat', async (req, res) => {
const start = Date.now();
try {
const completion = await openai.chat.completions.create({
model: 'gpt-4o-mini',
messages: req.body.messages,
});
await trackOpenAiCompletion(client, {
model: completion.model,
statusCode: 200,
latencyMs: Date.now() - start,
usage: completion.usage,
});
res.json(completion);
} catch (e) {
await client.track({
endpoint: 'POST /api/chat',
method: 'POST',
statusCode: 500,
latencyMs: Date.now() - start,
provider: 'openai',
errorMessage: e instanceof Error ? e.message : 'error',
});
res.status(500).json({ error: 'chat failed' });
}
});
const server = app.listen(process.env.PORT ?? 3000);
process.on('SIGTERM', async () => {
await client.shutdown();
server.close();
});Middleware options
| Option | Default | Description |
|---|---|---|
serviceName | 'api' | service_name on events |
Middleware behavior
- Path normalization (
/users/42→/users/:id) traceparentresponse header- Reads
x-session-id,x-user-id - Tracks on
res.finish
Verify
bash
npx amlexia health
curl http://localhost:3000/healthCheck Live and Overview on app.amlexia.com.
