Express integration guide

Add Bugsnag to your Express projects to automatically capture and report errors in production.

New to Bugsnag? Create an account

Installation

npm

Install Bugsnag and the Bugsnag / Express integration from the npm registry using npm or yarn:

npm install --save @bugsnag/js @bugsnag/plugin-express
# or
yarn add @bugsnag/js @bugsnag/plugin-express

Basic configuration

This documentation is for version 7 of the Bugsnag JavaScript notifier. If you are using older versions, we recommend upgrading to the latest release using our Upgrade guide. Documentation for the previous release can be found on our legacy pages.

Depending on which module system you are using, you’ll need to include Bugsnag in one of the following ways:

// commonjs/node-style require
var Bugsnag = require('@bugsnag/js')
var BugsnagPluginExpress = require('@bugsnag/plugin-express')

// ES module-style import
import Bugsnag from '@bugsnag/js'
import BugsnagPluginExpress from '@bugsnag/plugin-express'

To start Bugsnag with the Express integration, import it and pass it along with your API key to Bugsnag.start as configuration:

Bugsnag.start({
  apiKey: 'YOUR_API_KEY',
  plugins: [BugsnagPluginExpress],
  otherOptions: value
})

You can find your API key in Project Settings.

Finally, in the part of your application where the Express server is configured, obtain and use the Express middleware:

var app = express()
var middleware = Bugsnag.getPlugin('express')

// This must be the first piece of middleware in the stack.
// It can only capture errors in downstream middleware
app.use(middleware.requestHandler)

/* all other middleware and application routes go here */

// This handles any errors that Express catches. This needs to go before other
// error handlers. Bugsnag will call the `next` error handler if it exists.
app.use(middleware.errorHandler)

For information on values that can be set in the configuration object, see configuration options.

TypeScript support

Type definitions are provided and will be picked up automatically by the TypeScript compiler when you import any of the top-level @bugsnag/* packages.

Reporting unhandled errors

After completing installation and basic configuration, unhandled exceptions and unhandled promise rejections will be reported and automatically appear on your Bugsnag dashboard.

Unhandled errors in Express routes will be reported with information about the request.

Reporting handled errors

Sometimes it is useful to manually notify Bugsnag of a problem. To do this, call Bugsnag.notify(). For example:

try {
  something.risky()
} catch (e) {
  Bugsnag.notify(e)
}

When reporting handled errors, it’s often helpful to send custom diagnostic data or to adjust the severity of particular errors. For more information, see reporting handled errors.

As well as capturing and reporting unhandled errors, the requestHandler middleware attaches a request-scoped Bugsnag client to req.bugsnag. This means that if you encounter an error in route or piece of middleware, you can call req.bugsnag.notify(err) which will include information about the request in the error report. For example:

app.get('/purchase/:productId', function (req, res, next) {
  db.products.find(req.params.id, function (err, product) {
    // calling next(err) routes the error to the Bugsnag errorHandler middleware
    if (err) return next(err)

    if (product.discontinued) {

      // This report will include detail about the request, plus anything we attach here
      req.bugsnag.notify(
        new Error('Attempted to purchase discontinued product'),
        function (event) {
          event.addMetadata('product', product)
        }
      })

      res.send(renderPurchaseError(product))
    } else {
      res.send(renderInvoice(product))
    }
  })
})

Sending diagnostic data

Automatically captured diagnostics

Bugsnag will automatically capture the following data for every exception:

  • Request info (if relevant and available)
  • Device time
  • Hostname
  • Release stage (production, beta, staging, etc)

Attaching custom diagnostics

It can often be helpful to attach application-specific diagnostic data to error reports. This can be accomplished by setting a callback which will be invoked before any reports are sent to Bugsnag.

The following adds a map of data to the “company” tab on the Bugsnag dashboard for all captured events:

Bugsnag.start({
  onError: function (event) {
    event.addMetadata('company', {
      name: "Acme Co.",
      country: "uk"
    })
  }
})

For more information, see Customizing error reports.

Identifying users

In order to correlate errors with customer reports, or to see a list of users who experienced each error, it is helpful to capture and display user information on your Bugsnag dashboard.

You can set the user information of an error report using the user configuration property when Bugsnag starts or via an onError callback.

Bugsnag.start({
  onError: function (event) {
    event.setUser('3', 'bugs.nag@bugsnag.com', 'Bugs Nag')
  }
})

For information on doing so, see Adding user data.

Logging breadcrumbs

Breadcrumbs are not yet supported on Node.

Session tracking

Bugsnag tracks the number of “sessions” that happen within your application. This allows you to compare stability scores between releases and helps you to understand the quality of your releases.

Sessions are captured and reported by default. This behavior can be disabled using the autoTrackSessions configuration option.

Sessions are reported in Node.js every time a request is served if you are using one of the server integrations:

  • @bugsnag/plugin-express
  • @bugsnag/plugin-restify
  • @bugsnag/plugin-koa

A summary of sessions recorded will be periodically sent to Bugsnag.

For more information about manually controlling session tracking, see Capturing sessions.

Tracking releases

Configure your app version to see the release that each error was introduced in.

Bugsnag.start({ appVersion: '4.10.0' })

Then set up a build tool integration to enable linking to code in your source control provider from the releases dashboard, timeline annotations, and stack traces.

Next steps

  • View @bugsnag/js, the library powering Bugsnag for Node.js, on GitHub
  • Get support for your questions and feature requests