{"id":18397,"library":"graphql-middleware-error-handler","title":"graphql-middleware-error-handler","description":"A generic GraphQL middleware that captures errors thrown in resolvers and forwards them to a custom logging function (e.g., Sentry, Bugsnag). Version 1.0.2 is the current stable release; maintenance is intermittent. Key differentiators: minimal API with only three options (onError, captureReturnedErrors, forwardErrors), works with any GraphQL server supporting graphql-middleware (v2–v6), and allows control over error rethrowing and returning error capture.","status":"active","version":"1.0.2","language":"javascript","source_language":"en","source_url":"https://github.com/unitedwardrobe/graphql-middleware-error-handler","tags":["javascript","graphql","middleware","error","exception","handler","typescript"],"install":[{"cmd":"npm install graphql-middleware-error-handler","lang":"bash","label":"npm"},{"cmd":"yarn add graphql-middleware-error-handler","lang":"bash","label":"yarn"},{"cmd":"pnpm add graphql-middleware-error-handler","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Peer dependency required to use the middleware with graphql-yoga or other compatible servers.","package":"graphql-middleware","optional":false}],"imports":[{"note":"The package exports a named function, not a default export. Use named import.","wrong":"import errorHandler from 'graphql-middleware-error-handler'","symbol":"errorHandler","correct":"import { errorHandler } from 'graphql-middleware-error-handler'"},{"note":"Type import available if using TypeScript. Useful for type-checking the options object.","wrong":"","symbol":"ErrorHandlerOptions","correct":"import { ErrorHandlerOptions } from 'graphql-middleware-error-handler'"},{"note":"In TypeScript, use 'import type' for the type, as it is not a runtime value.","wrong":"import { ErrorMiddlewareFn } from 'graphql-middleware-error-handler'","symbol":"ErrorMiddlewareFn","correct":"import type { ErrorMiddlewareFn } from 'graphql-middleware-error-handler'"},{"note":"With CommonJS (require), destructure to get the named export. The package is ESM-first but works with CJS via bundlers.","wrong":"const errorHandler = require('graphql-middleware-error-handler')","symbol":"errorHandler","correct":"const { errorHandler } = require('graphql-middleware-error-handler')"}],"quickstart":{"code":"import { errorHandler } from 'graphql-middleware-error-handler';\nimport { GraphQLServer } from 'graphql-yoga';\n\nconst typeDefs = `\n  type Query {\n    hello: String!\n    error: String!\n  }\n`;\n\nconst resolvers = {\n  Query: {\n    hello: () => 'Hello',\n    error: () => { throw new Error('Unexpected error'); }\n  }\n};\n\nconst errorHandlerMiddleware = errorHandler({\n  onError: (error, context) => {\n    console.error('Captured error:', error.message);\n  },\n  captureReturnedErrors: true,\n  forwardErrors: false\n});\n\nconst server = new GraphQLServer({\n  typeDefs,\n  resolvers,\n  middlewares: [errorHandlerMiddleware]\n});\n\nserver.start(() => console.log('Server running'));","lang":"typescript","description":"Sets up a GraphQL server with graphql-yoga and errorHandler middleware that logs errors to console instead of throwing."},"warnings":[{"fix":"Order middlewares correctly: [otherMiddlewares, errorHandlerMiddleware].","message":"The errorHandler middleware must be placed after other middlewares that may throw; otherwise, those errors won't be captured.","severity":"gotcha","affected_versions":">=1.0"},{"fix":"Set forwardErrors: true in development or use a different logging strategy.","message":"If forwardErrors is false (default), caught errors are swallowed and not returned to the client. This may hide issues in development.","severity":"gotcha","affected_versions":">=1.0"},{"fix":"Sanitize error object before sending to external services.","message":"The onError callback receives the original error, which may include sensitive information (stack traces, internal messages). Be cautious when logging.","severity":"gotcha","affected_versions":">=1.0"},{"fix":"Ensure your graphql-middleware version is within 2.x–6.x. Upgrade if necessary.","message":"graphql-middleware v2 may have compatibility issues with newer GraphQL servers; the peer dependency range is 2.x - 6.x.","severity":"deprecated","affected_versions":">=1.0"},{"fix":"Ensure resolvers throw Error instances or return them directly if captureReturnedErrors is enabled.","message":"captureReturnedErrors only works if the resolver returns an instance of Error. Non-Error objects are not captured.","severity":"gotcha","affected_versions":">=1.0"}],"env_vars":null,"last_verified":"2026-04-25T00:00:00.000Z","next_check":"2026-07-24T00:00:00.000Z","problems":[{"fix":"Use named import: import { errorHandler } from 'graphql-middleware-error-handler'","cause":"Importing the package incorrectly as a default export instead of a named export.","error":"TypeError: (0 , graphql_middleware_error_handler.errorHandler) is not a function"},{"fix":"Use const { errorHandler } = require('graphql-middleware-error-handler')","cause":"Using require('...') without destructuring the named export.","error":"errorHandler is not a function (when using require)"},{"fix":"Run: npm install graphql-middleware","cause":"Missing peer dependency 'graphql-middleware'. The package does not install it automatically.","error":"Cannot find module 'graphql-middleware'"},{"fix":"Pass an object with an onError property: errorHandler({ onError: (err, ctx) => { /* ... */ } })","cause":"Creating the errorHandler without passing the required onError callback.","error":"The 'onError' option is required but was not provided."}],"ecosystem":"npm","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}