Skip to content

Conversation

tlhunter
Copy link
Member

@tlhunter tlhunter commented Aug 14, 2025

What does this PR do?

Motivation

  • node v24 compat is complete
  • however these Express tests are having issues due to 11 year old express not working with node v24

All of the Express errors seem to be the same:

TypeError: Cannot read properties of undefined (reading 'last-modified')
    at fresh (/home/runner/work/dd-trace-js/dd-trace-js/versions/express@4.3.0/node_modules/fresh/index.js:29:25)
    at IncomingMessage.fresh (/home/runner/work/dd-trace-js/dd-trace-js/versions/express@4.3.0/node_modules/express/lib/request.js:397:12)

This seems like it could be an incompatibility with the fresh module and node v24 but I don't see any issues on their tracker.

Local testing:

$ nvm use 22
$ ./node_modules/.bin/mocha -r "packages/dd-trace/test/setup/mocha.js" packages/datadog-plugin-express/test/index.spec.js
# ok
$ nvm use 24
$ ./node_modules/.bin/mocha -r "packages/dd-trace/test/setup/mocha.js" packages/datadog-plugin-express/test/index.spec.js
# not ok

The code that fails is in the fresh package, which is called from express. The issue is that the req.res._headers is undefined. Those response headers are an internal field. Maybe it's a version mismatch between fresh and express? Locally when I get the failure it's express 4.0.0 and fresh 0.2.2 which both seem pretty old and perhaps of the same era. Or do we clobber the Response#_headers somewhere?

My research suggests response _headers was deprecated ages ago so I'm thinking it's an issue with bad package versions getting installed.

Copy link

github-actions bot commented Aug 14, 2025

Overall package size

Self size: 11.86 MB
Deduped: 111.47 MB
No deduping: 111.82 MB

Dependency sizes | name | version | self size | total size | |------|---------|-----------|------------| | @datadog/libdatadog | 0.7.0 | 35.02 MB | 35.02 MB | | @datadog/native-appsec | 10.1.0 | 20.37 MB | 20.37 MB | | @datadog/native-iast-taint-tracking | 4.0.0 | 11.72 MB | 11.73 MB | | @datadog/pprof | 5.9.0 | 9.77 MB | 10.1 MB | | @opentelemetry/core | 1.30.1 | 908.66 kB | 7.16 MB | | protobufjs | 7.5.4 | 2.95 MB | 5.6 MB | | @datadog/wasm-js-rewriter | 4.0.1 | 2.85 MB | 3.58 MB | | @datadog/native-metrics | 3.1.1 | 1.02 MB | 1.43 MB | | @opentelemetry/api | 1.8.0 | 1.21 MB | 1.21 MB | | jsonpath-plus | 10.3.0 | 617.18 kB | 1.08 MB | | import-in-the-middle | 1.14.2 | 122.36 kB | 850.93 kB | | lru-cache | 10.4.3 | 804.3 kB | 804.3 kB | | opentracing | 0.14.7 | 194.81 kB | 194.81 kB | | source-map | 0.7.6 | 185.63 kB | 185.63 kB | | pprof-format | 2.1.0 | 111.69 kB | 111.69 kB | | @datadog/sketches-js | 2.1.1 | 109.9 kB | 109.9 kB | | lodash.sortby | 4.7.0 | 75.76 kB | 75.76 kB | | ignore | 7.0.5 | 63.38 kB | 63.38 kB | | istanbul-lib-coverage | 3.2.2 | 34.37 kB | 34.37 kB | | rfdc | 1.4.1 | 27.15 kB | 27.15 kB | | dc-polyfill | 0.1.10 | 26.73 kB | 26.73 kB | | @isaacs/ttlcache | 1.4.1 | 25.2 kB | 25.2 kB | | tlhunter-sorted-set | 0.1.0 | 24.94 kB | 24.94 kB | | shell-quote | 1.8.3 | 23.74 kB | 23.74 kB | | limiter | 1.1.5 | 23.17 kB | 23.17 kB | | retry | 0.13.1 | 18.85 kB | 18.85 kB | | semifies | 1.0.0 | 15.84 kB | 15.84 kB | | jest-docblock | 29.7.0 | 8.99 kB | 12.76 kB | | crypto-randomuuid | 1.0.0 | 11.18 kB | 11.18 kB | | ttl-set | 1.0.0 | 4.61 kB | 9.69 kB | | mutexify | 1.4.0 | 5.71 kB | 8.74 kB | | path-to-regexp | 0.1.12 | 6.6 kB | 6.6 kB | | koalas | 1.0.2 | 6.47 kB | 6.47 kB | | module-details-from-path | 1.0.4 | 3.96 kB | 3.96 kB |

🤖 This report was automatically generated by heaviest-objects-in-the-universe

Copy link

codecov bot commented Aug 14, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 83.72%. Comparing base (bf13fa7) to head (85de022).
⚠️ Report is 2 commits behind head on master.

Additional details and impacted files
@@           Coverage Diff           @@
##           master    #6283   +/-   ##
=======================================
  Coverage   83.72%   83.72%           
=======================================
  Files         476      476           
  Lines       19996    19996           
=======================================
  Hits        16741    16741           
  Misses       3255     3255           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@datadog-datadog-prod-us1
Copy link

datadog-datadog-prod-us1 bot commented Aug 14, 2025

✅ Tests

🎉 All green!

❄️ No new flaky tests detected
🧪 All tests passed

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: 85de022 | Docs | Was this helpful? Give us feedback!

@pr-commenter
Copy link

pr-commenter bot commented Aug 14, 2025

Benchmarks

Benchmark execution time: 2025-08-18 17:25:46

Comparing candidate commit 85de022 in PR branch tlhunter/fix-express-node22-ci with baseline commit bf13fa7 in branch master.

Found 0 performance improvements and 0 performance regressions! Performance is the same for 1267 metrics, 56 unstable metrics.

@tlhunter
Copy link
Member Author

tlhunter commented Aug 14, 2025

Good news!. It looks like Express.js v4.0.0 is just busted:

npm init -y && npm install express@4.0.0
node app.js &
curl http://localhost:3000
# TypeError: Cannot read properties of undefined (reading 'last-modified')
# app.js
const express = require('express')
const app = express()
const port = 3000

app.get('/', (req, res) => {
  res.send('Hello World!')
})

app.listen(port, () => {
  console.log(`Example app listening on port ${port}`)
})

I'm sure it wasn't busted at release time but that the fresh package became incompatible at a later point.

More info:

$ npm ls --depth=10
expressteST@ /private/tmp/expressteST
└─┬ express@4.0.0
  ├─┬ accepts@1.0.0
  │ ├── mime@1.2.11
  │ └── negotiator@0.3.0
  ├── buffer-crc32@0.2.1
  ├── cookie-signature@1.0.3
  ├── cookie@0.1.0
  ├── debug@0.8.1
  ├── escape-html@1.0.1
  ├── fresh@0.2.2
  ├── merge-descriptors@0.0.2
  ├── methods@0.1.0
  ├── parseurl@1.0.1
  ├── path-to-regexp@0.1.2
  ├── qs@0.6.6
  ├── range-parser@1.0.0
  ├─┬ send@0.2.0
  │ ├── debug@0.8.1 deduped
  │ ├── fresh@0.2.2 deduped
  │ ├── mime@1.2.11 deduped
  │ └── range-parser@1.0.0 deduped
  ├─┬ serve-static@1.0.1
  │ └─┬ send@0.1.4
  │   ├── debug@0.8.1 deduped
  │   ├── fresh@0.2.0
  │   ├── mime@1.2.11 deduped
  │   └── range-parser@0.0.4
  ├─┬ type-is@1.0.0
  │ └── mime@1.2.11 deduped
  └── utils-merge@1.0.0

@tlhunter tlhunter force-pushed the tlhunter/fix-express-node22-ci branch 6 times, most recently from f9d5685 to 69792cc Compare August 14, 2025 22:28
@tlhunter tlhunter force-pushed the tlhunter/fix-express-node22-ci branch from ab06744 to 85de022 Compare August 18, 2025 17:15
@tlhunter tlhunter marked this pull request as ready for review August 18, 2025 19:05
@tlhunter tlhunter requested review from a team as code owners August 18, 2025 19:05
@tlhunter tlhunter enabled auto-merge (squash) August 18, 2025 19:06
Copy link
Contributor

@wconti27 wconti27 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@tlhunter tlhunter merged commit 7a54041 into master Aug 18, 2025
697 of 699 checks passed
@tlhunter tlhunter deleted the tlhunter/fix-express-node22-ci branch August 18, 2025 19:56
dd-octo-sts bot pushed a commit that referenced this pull request Aug 19, 2025
@dd-octo-sts dd-octo-sts bot mentioned this pull request Aug 19, 2025
BridgeAR pushed a commit that referenced this pull request Aug 19, 2025
khanayan123 pushed a commit that referenced this pull request Aug 19, 2025
tlhunter added a commit that referenced this pull request Aug 22, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants