# Node agent doesn't capture uncaught exceptions or unhandled rejections

**URL:** <https://discuss.elastic.co/t/node-agent-doesnt-capture-uncaught-exceptions-or-unhandled-rejections/357144>\
**Category:** Elastic Observability\
**Created:** [April 10, 2024, 12:34pm UTC](https://discuss.elastic.co/t/node-agent-doesnt-capture-uncaught-exceptions-or-unhandled-rejections/357144 "2024-04-10T12:34:46Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Vectarian-Jorge](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/vectarian-jorge/32/133417_2.png) [@Vectarian-Jorge](https://discuss.elastic.co/u/Vectarian-Jorge)\
**Post date:** [April 10, 2024, 12:34pm UTC](https://discuss.elastic.co/t/node-agent-doesnt-capture-uncaught-exceptions-or-unhandled-rejections/357144/1 "2024-04-10T12:34:47Z")

</div>

This is a duplicate of a [Github issue](https://github.com/elastic/apm-agent-nodejs/issues/3960). I'm not sure what's the correct place to discuss it.

**Describe the bug**

Suddenly my Express applications do not capture errors or exceptions that cause the application to crash. Up until the 21st of February I can see both in the Error tab of the APM and in the Discover tool of ELK that there were crashes reported due to silly mistakes, like a missing environment variable. But nothing since then. And I've tried to crash the application deliberately adding `throw new Error('Boom')` and `Promise.reject(new Error('Kaboom'))` and neither is reported by the APM.

Investigating any possible changes I've made I can only think of upgrading the agent's version from 3.42.0 to 4.3.0. But I've tried with the old version and it behaves the same way.

**To Reproduce**

> **package.json**
>
> ```auto
> {
> "type": "module",
> "name": "experiment",
> "version": "1.0.0",
> "description": "",
> "main": "index.js",
> "scripts": {
> "test": "echo \"Error: no test specified\" && exit 1"
> },
> "author": "",
> "license": "ISC",
> "dependencies": {
> "elastic-apm-node": "^4.5.0",
> "express": "^4.19.2"
> }
> }
> 
> ```

> **index.js**
>
> ```auto
> import './apm.js'; // Must go first
> import express from 'express';
> 
> const port = 3000;
> const app = express();
> 
> app.get('/', (_req, res) => {
> //Promise.reject(new Error('Kaboom')); // Uncomment either of these
> res.send('Hello World!');
> });
> 
> app.listen(port, () => {
> console.log(`Example app listening on port ${port}`);
> });
> 
> //throw new Error('Boom'); // Uncomment either of these
> 
> ```

> **apm.js**
>
> ```auto
> import apm from 'elastic-apm-node';
> 
> apm.start({
> environment: 'local',
> serverUrl: 'https://example.com:12345/',
> });
> 
> ```

Tried with `require` instead of ES modules too. Nothing.

**Expected behavior**

Uncaught exceptions and unhandled rejections being reported by the agent so that they can be monitored in the APM tool of ELK.

**Environment (please complete the following information)**

- OS: Linux and MacOS
- Node.js version: 16.16.0
- APM Server version: 7.17.8
- Agent version: 3.42.0 and 4.3.0

**How are you starting the agent? (please tick one of the boxes)**

- Calling `agent.start()` directly (e.g. `require('elastic-apm-node').start(...)`)  
In particular, I have a `init-elastic-apm.ts` file where I start the agent with a config dependent on some environment variables. Then the first line of my `index.ts` file is `import apm from 'elastic-apm-node'`.
- Requiring `elastic-apm-node/start` from within the source code
- Starting node with `-r elastic-apm-node/start`

**Additional context**

Agent config options:

> **Click to expand**
>
> ```auto
> import { hostname } from 'node:os';
> import pkg from '../../package.json' assert { type: 'json' };
> {
> serviceName: pkg.name.split('/')[1],
> serviceVersion: pkg.version,
> serviceNodeName: hostname(),
> environment: process.env['APP_ENV'],
> serverUrl: process.env['ELK_KIBANA_URL'],
> captureBody: 'all',
> captureExceptions: true, // <-- I've tried with default and explicit `captureExceptions`
> }
> 
> ```

`package.json` dependencies:

> **Click to expand**
>
> ```auto
> "@aws-sdk/client-s3": "3.245.0",
> "@aws-sdk/client-timestream-write": "3.245.0",
> "@bluesialia/express-graphql": "0.15.0",
> "@elastic/ecs-pino-format": "1.5.0",
> "@sentry/node": "7.103.0",
> "bcryptjs": "2.4.3",
> "body-parser": "1.20.1",
> "compression": "1.7.4",
> "cors": "2.8.5",
> "dotenv": "16.3.1",
> "elastic-apm-node": "3.42.0",
> "express": "4.18.2",
> "express-async-errors": "3.1.1",
> "extract-files": "13.0.0",
> "firebase-admin": "11.10.1",
> "google-auth-library": "8.7.0",
> "graphql": "16.6.0",
> "graphql-scalars": "1.20.1",
> "graphql-upload": "13.0.0",
> "graphql-ws": "5.11.2",
> "http-status": "1.6.1",
> "jszip": "3.10.1",
> "knex": "2.4.0",
> "modern-async": "1.1.3",
> "node-fetch": "3.3.2",
> "objection": "3.1.4",
> "objection-paginator": "0.7.1",
> "paddle-sdk": "3.2.0",
> "pg": "8.8.0",
> "pino": "8.17.1",
> "stringify-object": "5.0.0",
> "wasmagic": "0.0.32"
> 
> ```

---

<div class="post-metadata">

**Author:** ![Vectarian-Jorge](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/vectarian-jorge/32/133417_2.png) [@Vectarian-Jorge](https://discuss.elastic.co/u/Vectarian-Jorge)\
**Post date:** [April 17, 2024, 2:09pm UTC](https://discuss.elastic.co/t/node-agent-doesnt-capture-uncaught-exceptions-or-unhandled-rejections/357144/2 "2024-04-17T14:09:30Z")

</div>

I see that there is a category APM. How can I move this post to that category?

---

<div class="post-metadata">

**Author:** ![Vectarian-Jorge](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/vectarian-jorge/32/133417_2.png) [@Vectarian-Jorge](https://discuss.elastic.co/u/Vectarian-Jorge)\
**Post date:** [April 17, 2024, 2:15pm UTC](https://discuss.elastic.co/t/node-agent-doesnt-capture-uncaught-exceptions-or-unhandled-rejections/357144/3 "2024-04-17T14:15:37Z")

</div>

Recreated it in the proper category and with the proper tag. Don't know how to delete this one.
