Express.js Error Monitoring
Learn how to set up highlight.io in Express.js.
Add `tracingOrigins` to your client Highlight snippet.
This backend SDK requires one of the Highlight frontend SDKs to be installed, so please make sure you've followed the fullstack mapping guide first.
H.init("<YOUR_PROJECT_ID>", {
tracingOrigins: ['localhost', 'example.myapp.com/backend'],
networkRecording: {
enabled: true,
recordHeadersAndBody: true,
},
});
Install the relevant Highlight SDK(s).
Install @highlight-run/node with your package manager.
npm install --save @highlight-run/node
Initialize the Highlight JS SDK.
Initialize the Highlight JS SDK with your project ID.
import { H } from '@highlight-run/node'
H.init({
projectID: '<YOUR_PROJECT_ID>',
serviceName: '<YOUR_SERVICE_NAME>',
environment: 'production',
})
Add the Express.js Highlight integration.
Use the Node Highlight SDK in your response handler.
import { H, Handlers } from '@highlight-run/node'
// or like this with commonjs
// const { H, Highlight } = require('@highlight-run/node')
const highlightConfig = {
projectID: '<YOUR_PROJECT_ID>',
serviceName: 'my-express-app',
serviceVersion: 'git-sha',
environment: 'production'
}
H.init(highlightConfig)
// import express after initializing highlight to automatically instrument express
import express from 'express'
const app = express()
// This should be before any controllers (route definitions)
app.use(Handlers.middleware(highlightConfig))
app.get('/', (req, res) => {
res.send(`Hello World! 0.8842109460521514`)
})
// This should be before any other error middleware and after all controllers (route definitions)
app.use(Handlers.errorHandler(highlightConfig))
app.listen(8080, () => {
console.log(`Example app listening on port 8080`)
})
Try/catch an error manually (without middleware).
If you are using express.js async handlers, you will need your own try/catch block that directly calls the highlight SDK to report an error. This is because express.js async handlers do not invoke error middleware.
app.get('/sync', (req: Request, res: Response) => {
// do something dangerous...
throw new Error('oh no! this is a synchronous error');
});
app.get('/async', async (req: Request, res: Response) => {
try {
// do something dangerous...
throw new Error('oh no!');
} catch (error) {
const { secureSessionId, requestId } = H.parseHeaders(req.headers);
H.consumeError(
error as Error,
secureSessionId,
requestId
);
} finally {
res.status(200).json({hello: 'world'});
}
});
Verify that your SDK is reporting errors.
You'll want to throw an exception in one of your express.js handlers. Access the API handler and make sure the error shows up in Highlight.
app.get('/', (req, res) => {
throw new Error('sample error!')
res.send(`Hello World! 0.8077551912108474`)
})
Set up logging.
With the JS SDKs, your logs are reported automatically from console methods. See the JS logging setup guide for more details.