diff --git a/src/graphqlUploadExpress.ts b/src/graphqlUploadExpress.ts index fe5d9cd..e53e53b 100644 --- a/src/graphqlUploadExpress.ts +++ b/src/graphqlUploadExpress.ts @@ -18,7 +18,7 @@ export type ProcessRequestOptions = { * @name graphqlUploadExpress * @param {ProcessRequestOptions} params Middleware options. Any [`ProcessRequestOptions`]{@link ProcessRequestOptions} can be used. * @param {ProcessRequestOptions.processRequest} [params.processRequest=processRequest] Used to process [GraphQL multipart requests](https://github.com/jaydenseric/graphql-multipart-request-spec). - * @param {boolean} [params.overrideSendResponse=true] Whether to override the Express `response.send` method to prevent sending a response before the request has ended. + * @param {boolean} [params.overrideSendResponse=false] Whether to override the Express `response.send` method to prevent sending a response before the request has ended. * @returns {Function} Express middleware. * @example Ways to `import`. * ```js @@ -53,11 +53,12 @@ export type ProcessRequestOptions = { * ``` */ export function graphqlUploadExpress(params: ProcessRequestOptions = {}) { - const { processRequest = defaultProcessRequest, overrideSendResponse = true, ...processRequestOptions } = params; + const { processRequest = defaultProcessRequest, overrideSendResponse, ...processRequestOptions } = params; return function graphqlUploadExpressMiddleware(request: Request, response: Response, next: NextFunction) { if (!request.is('multipart/form-data')) return next(); - if (overrideSendResponse) { + // if processRequest is defined, overrideSendResponse is undefined, and processRequest returns a truthy value, override response.send + if (overrideSendResponse || (typeof overrideSendResponse === 'undefined' && processRequest)) { const finished = new Promise((resolve) => request.on('end', resolve)); const { send } = response; // Todo: Find a less hacky way to prevent sending a response before the request has ended.