From f70b342df29b37cd86d969bbf40ed089f39b4d06 Mon Sep 17 00:00:00 2001 From: Greg Soltis Date: Fri, 15 Nov 2024 11:48:29 -0800 Subject: [PATCH 1/3] Add a name to the middleware function --- .../server/src/__tests__/express4/expressSpecific.test.ts | 7 +++++++ packages/server/src/express4/index.ts | 5 ++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/server/src/__tests__/express4/expressSpecific.test.ts b/packages/server/src/__tests__/express4/expressSpecific.test.ts index f175744c02c..25f6ecc78d7 100644 --- a/packages/server/src/__tests__/express4/expressSpecific.test.ts +++ b/packages/server/src/__tests__/express4/expressSpecific.test.ts @@ -141,6 +141,13 @@ it('incremental delivery works with compression', async () => { await server.stop(); }); +it('express middleware has a name', async () => { + const server = new ApolloServer({ typeDefs: 'type Query {f: ID}' }); + await server.start(); + expect(expressMiddleware(server).name).toEqual('apolloGraphQL'); + await server.stop(); +}); + it('supporting doubly-encoded variables example from migration guide', async () => { const server = new ApolloServer({ typeDefs: 'type Query {hello(s: String!): String!}', diff --git a/packages/server/src/express4/index.ts b/packages/server/src/express4/index.ts index edee0084269..d19d463361d 100644 --- a/packages/server/src/express4/index.ts +++ b/packages/server/src/express4/index.ts @@ -43,7 +43,10 @@ export function expressMiddleware( const context: ContextFunction<[ExpressContextFunctionArgument], TContext> = options?.context ?? defaultContext; - return (req, res, next) => { + // Note that some instrumentation, such as @opentelemetry/instrumentation-express, + // relies on middleware functions being named. Returning a named function here + // is the difference between seeing `apolloGraphQL` and `anonymous` in traces. + return function apolloGraphQL(req, res, next) { if (!req.body) { // The json body-parser *always* sets req.body to {} if it's unset (even // if the Content-Type doesn't match), so if it isn't set, you probably From 29c388dd4f04ea5ef5cde2ca38e44d3d89c35a64 Mon Sep 17 00:00:00 2001 From: Greg Soltis Date: Fri, 15 Nov 2024 11:59:21 -0800 Subject: [PATCH 2/3] Add changeset --- .changeset/nine-chefs-cry.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/nine-chefs-cry.md diff --git a/.changeset/nine-chefs-cry.md b/.changeset/nine-chefs-cry.md new file mode 100644 index 00000000000..e2cd367c5ce --- /dev/null +++ b/.changeset/nine-chefs-cry.md @@ -0,0 +1,5 @@ +--- +'@apollo/server': patch +--- + +Use a named function for express middleware From 90a0f45b87b4f82c5e48aba929d2da8f7f4bddb0 Mon Sep 17 00:00:00 2001 From: Greg Soltis Date: Fri, 15 Nov 2024 12:00:51 -0800 Subject: [PATCH 3/3] Add opentelemetry to the dictionary --- cspell-dict.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/cspell-dict.txt b/cspell-dict.txt index cde7791f02a..c1f7ef00713 100644 --- a/cspell-dict.txt +++ b/cspell-dict.txt @@ -133,6 +133,7 @@ Nuxt oneof onwarn opde +opentelemetry paque parseurl pbjs