prototypes/server/extend/response-error.js

const {
	STATUS_CODES
} = require('http');

/**
 * @private
 * @param {SGAppsServerRequest} request 
 * @param {SGAppsServerResponse} response 
 * @param {SGAppsServer} server 
 * @param {function} callback
 */
function ResponseSendErrorDecorator(request, response, server, callback) {
	if (request === null || response === null) {
		callback();
		return;
	}

	/**
	 * @memberof SGAppsServerResponse#
	 * @method sendError
	 * @param {Error} error 
	 * @param {object} [options]
	 * @param {number} [options.statusCode=500]
	 */
	response.sendError = function (error, options) {
		options = Object.assign(
			{
				statusCode: 500
			},
			options || {}
		);
		if (!response.response.headersSent) {
			response.response.statusCode = options.statusCode;
			response.response.statusMessage = STATUS_CODES[options.statusCode] || `Unknown status code: ${options.statusCode}`;
		}
		if (error && (error instanceof Error)) {
			if (response.response.writable) {
				response.response.write(
					error.message,
					function _ResponseErrorWriteCallback() {
						if (!response._flags.finished) {
							response.response.end();
						}
					}
				);
				return;
			}
		}
		if (!response._flags.finished) {
			response.response.end();
		}
	};

	// response._destroy.push(() => {
	// 	delete response.sendError;
	// });

	callback();
};

module.exports = ResponseSendErrorDecorator;