Skip to content

Commit

Permalink
Fix/use express built in json middleware (#7740)
Browse files Browse the repository at this point in the history
Use built-in `express.json()` functionality instead of separate
`body-parser` package.

---------

Co-authored-by: Trevor Scheer <trevor.scheer@gmail.com>
  • Loading branch information
barnisanov and trevor-scheer committed Nov 8, 2023
1 parent f71d045 commit fe68c1b
Show file tree
Hide file tree
Showing 12 changed files with 1,493 additions and 121 deletions.
6 changes: 6 additions & 0 deletions .changeset/honest-kangaroos-appear.md
@@ -0,0 +1,6 @@
---
'@apollo/server-integration-testsuite': patch
'@apollo/server': patch
---

Uninstalled `body-parser` and used `express` built-in `body-parser` functionality instead(mainly the json middleware)
101 changes: 0 additions & 101 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 0 additions & 2 deletions package.json
Expand Up @@ -51,7 +51,6 @@
"@josephg/resolvable": "1.0.1",
"@rollup/plugin-commonjs": "25.0.7",
"@types/async-retry": "1.4.7",
"@types/body-parser": "1.19.4",
"@types/compression": "1.7.4",
"@types/cors": "2.8.15",
"@types/express": "4.17.20",
Expand All @@ -74,7 +73,6 @@
"@typescript-eslint/parser": "5.62.0",
"@vendia/serverless-express": "4.10.4",
"awaiting": "3.0.0",
"body-parser": "1.20.2",
"codecov": "3.8.3",
"compression": "1.7.4",
"cors": "2.8.5",
Expand Down
5 changes: 2 additions & 3 deletions packages/integration-testsuite/package.json
Expand Up @@ -29,11 +29,10 @@
"@apollo/cache-control-types": "^1.0.3",
"@apollo/client": "^3.6.9",
"@apollo/server": "4.9.5",
"@apollo/utils.keyvaluecache": "^2.1.0",
"@apollo/utils.createhash": "^2.0.0",
"@apollo/usage-reporting-protobuf": "^4.1.1",
"@apollo/utils.createhash": "^2.0.0",
"@apollo/utils.keyvaluecache": "^2.1.0",
"@josephg/resolvable": "^1.0.1",
"body-parser": "^1.20.0",
"express": "^4.18.1",
"graphql-http": "1.22.0",
"graphql-tag": "^2.12.6",
Expand Down
3 changes: 1 addition & 2 deletions packages/integration-testsuite/src/apolloServerTests.ts
@@ -1,7 +1,6 @@
import http from 'http';
import { createHash } from '@apollo/utils.createhash';
import express from 'express';
import bodyParser from 'body-parser';
import loglevel from 'loglevel';

import { Report, Trace } from '@apollo/usage-reporting-protobuf';
Expand Down Expand Up @@ -874,7 +873,7 @@ export function defineIntegrationTestSuiteApolloServerTests(
next();
});
this.app.use(
bodyParser.raw({
express.raw({
inflate: true,
type: '*/*',
}),
Expand Down
3 changes: 1 addition & 2 deletions packages/server/package.json
Expand Up @@ -137,11 +137,10 @@
"@apollo/utils.withrequired": "^2.0.0",
"@graphql-tools/schema": "^9.0.0",
"@josephg/resolvable": "^1.0.0",
"@types/express-serve-static-core": "^4.17.30",
"@types/express": "^4.17.13",
"@types/express-serve-static-core": "^4.17.30",
"@types/node-fetch": "^2.6.1",
"async-retry": "^1.2.1",
"body-parser": "^1.20.0",
"cors": "^2.8.5",
"express": "^4.17.1",
"loglevel": "^1.6.8",
Expand Down
@@ -1,14 +1,13 @@
import express from 'express';
import express, { json } from 'express';
import request from 'supertest';
import compression, { filter as defaultFilter } from 'compression';
import { ApolloServer, BaseContext } from '../../index.js';
import { expressMiddleware } from '../../express4/index.js';
import { it, expect } from '@jest/globals';
import resolvable from '@josephg/resolvable';
import cors from 'cors';
import { json } from 'body-parser';

it('gives helpful error if body-parser middleware is not installed', async () => {
it('gives helpful error if json middleware is not installed', async () => {
const server = new ApolloServer({ typeDefs: 'type Query {f: ID}' });
await server.start();
const app = express();
Expand All @@ -18,7 +17,7 @@ it('gives helpful error if body-parser middleware is not installed', async () =>
await request(app)
.post('/')
.send({ query: '{hello}' })
.expect(500, /forgot to set up the `body-parser`/);
.expect(500, /forgot to set up the `json` middleware/);
await server.stop();
});

Expand Down
3 changes: 1 addition & 2 deletions packages/server/src/__tests__/express4/integration.test.ts
@@ -1,6 +1,5 @@
import { json } from 'body-parser';
import cors from 'cors';
import express from 'express';
import express, { json } from 'express';
import http from 'http';
import { ApolloServer, ApolloServerOptions, BaseContext } from '@apollo/server';
import { expressMiddleware } from '@apollo/server/express4';
Expand Down
@@ -1,6 +1,5 @@
import { json } from 'body-parser';
import cors from 'cors';
import express from 'express';
import express, { json } from 'express';
import http from 'http';
import { ApolloServer, ApolloServerOptions, BaseContext } from '@apollo/server';
import { expressMiddleware } from '@apollo/server/express4';
Expand Down
2 changes: 1 addition & 1 deletion packages/server/src/express4/index.ts
Expand Up @@ -52,7 +52,7 @@ export function expressMiddleware<TContext extends BaseContext>(
res.status(500);
res.send(
'`req.body` is not set; this probably means you forgot to set up the ' +
'`body-parser` middleware before the Apollo Server middleware.',
'`json` middleware before the Apollo Server middleware.',
);
return;
}
Expand Down
3 changes: 1 addition & 2 deletions packages/server/src/standalone/index.ts
@@ -1,5 +1,4 @@
import type { WithRequired } from '@apollo/utils.withrequired';
import bodyParser from 'body-parser'; // note that importing 'json' directly doesn't work in ESM
import cors from 'cors';
import express from 'express';
import http, { type IncomingMessage, type ServerResponse } from 'http';
Expand Down Expand Up @@ -58,7 +57,7 @@ export async function startStandaloneServer<TContext extends BaseContext>(
const context = options?.context ?? (async () => ({}) as TContext);
app.use(
cors(),
bodyParser.json({ limit: '50mb' }),
express.json({ limit: '50mb' }),
expressMiddleware(server, { context }),
);

Expand Down

0 comments on commit fe68c1b

Please sign in to comment.