From 6590326cc08ce1868ec8014cef60744a7760e6f8 Mon Sep 17 00:00:00 2001 From: Olivier Hardy Date: Wed, 2 Dec 2015 11:46:30 +0100 Subject: [PATCH 1/5] Add support for errorsCallback so we can got errors detail on server side --- package.json | 2 +- src/__tests__/http-test.js | 20 ++++++++++++++++++++ src/index.js | 7 ++++++- 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 7fb91a65..d8dc7195 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "express": "4.13.3", "express3": "*", "flow-bin": "0.18.1", - "graphql": "0.4.8", + "graphql": "0.4.14", "isparta": "3.0.3", "mocha": "2.2.5", "multer": "1.0.3", diff --git a/src/__tests__/http-test.js b/src/__tests__/http-test.js index 31878dbf..97a1e149 100644 --- a/src/__tests__/http-test.js +++ b/src/__tests__/http-test.js @@ -793,6 +793,26 @@ describe('test harness', () => { }); describe('Error handling functionality', () => { + it('call errorsCallback on errors', async done => { + var app = express(); + + app.use(urlString(), graphqlHTTP({ + schema: TestSchema, + pretty: true + }, errors => { + expect(errors).to.have.length(1); + let error = errors[0]; + expect(error.message).to.equal('Throws!'); + expect(error.originalError).to.be.an('object'); + done(); + })); + + await request(app) + .get(urlString({ + query: '{thrower}', + })); + }); + it('handles field errors caught by GraphQL', async () => { var app = express(); diff --git a/src/index.js b/src/index.js index 38258bc3..d70f4731 100644 --- a/src/index.js +++ b/src/index.js @@ -51,7 +51,7 @@ type Middleware = (request: Request, response: Response) => void; * Middleware for express; takes an options object or function as input to * configure behavior, and returns an express middleware. */ -export default function graphqlHTTP(options: Options): Middleware { +export default function graphqlHTTP(options: Options, errorsCallback: ?Function): Middleware { if (!options) { throw new Error('GraphQL middleware requires options.'); } @@ -169,6 +169,11 @@ export default function graphqlHTTP(options: Options): Middleware { response.status(error.status || 500); return { errors: [ error ] }; }).then(result => { + // Call errorsCallback if errors + if (errorsCallback) { + errorsCallback(result.errors); + } + // Format any encountered errors. if (result && result.errors) { result.errors = result.errors.map(formatError); From 892fffea819c4dffac8049c9d9697e8caa2bf972 Mon Sep 17 00:00:00 2001 From: Olivier Hardy Date: Wed, 2 Dec 2015 13:26:34 +0100 Subject: [PATCH 2/5] Add postinstall script so we can do a npm install on this fork --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index d8dc7195..e3316045 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "lint": "eslint src", "check": "flow check", "build": "rm -rf dist/* && babel src --ignore __tests__ --out-dir dist", + "postinstall": "rm -rf dist/* && babel src --ignore __tests__ --out-dir dist", "watch": "babel --optional runtime resources/watch.js | node", "cover": "babel-node node_modules/.bin/isparta cover --root src --report html node_modules/.bin/_mocha -- $npm_package_options_mocha", "cover:lcov": "babel-node node_modules/.bin/isparta cover --root src --report lcovonly node_modules/.bin/_mocha -- $npm_package_options_mocha", From 5841f7b66b24bd7daec353c1c53505bc624227d3 Mon Sep 17 00:00:00 2001 From: Olivier Hardy Date: Wed, 2 Dec 2015 13:28:05 +0100 Subject: [PATCH 3/5] Remove directories in package.json --- package.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/package.json b/package.json index e3316045..7ab98f94 100644 --- a/package.json +++ b/package.json @@ -21,9 +21,6 @@ "api" ], "main": "dist/index.js", - "directories": { - "lib": "./dist" - }, "files": [ "dist", "README.md", From d0b53cd17e077a6928b300b0e8b11a8b69123001 Mon Sep 17 00:00:00 2001 From: Olivier Hardy Date: Wed, 2 Dec 2015 13:30:01 +0100 Subject: [PATCH 4/5] Add `src` folder to files in package.json --- package.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/package.json b/package.json index 7ab98f94..56620159 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,11 @@ "api" ], "main": "dist/index.js", + "directories": { + "lib": "./dist" + }, "files": [ + "src", "dist", "README.md", "LICENSE", From d42887c1e7841a4032a89947ed08bb4bf69b2ee1 Mon Sep 17 00:00:00 2001 From: Olivier Hardy Date: Wed, 2 Dec 2015 14:02:46 +0100 Subject: [PATCH 5/5] Only call errorsCallback when we have an error --- src/index.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/index.js b/src/index.js index d70f4731..f7de37f0 100644 --- a/src/index.js +++ b/src/index.js @@ -169,13 +169,14 @@ export default function graphqlHTTP(options: Options, errorsCallback: ?Function) response.status(error.status || 500); return { errors: [ error ] }; }).then(result => { - // Call errorsCallback if errors - if (errorsCallback) { - errorsCallback(result.errors); - } // Format any encountered errors. if (result && result.errors) { + // Call errorsCallback if errors + if (errorsCallback ) { + errorsCallback(result.errors); + } + result.errors = result.errors.map(formatError); }