mirror of
https://github.com/n8n-io/n8n.git
synced 2025-03-05 20:50:17 -08:00
fix(core): Improve handling of wrapped errors (#8510)
This commit is contained in:
parent
f1910a10a6
commit
670af167e6
|
@ -39,12 +39,15 @@ export abstract class NodeError extends ExecutionBaseError {
|
||||||
readonly node: INode,
|
readonly node: INode,
|
||||||
error: Error | JsonObject,
|
error: Error | JsonObject,
|
||||||
) {
|
) {
|
||||||
if (error instanceof NodeError) return error;
|
|
||||||
|
|
||||||
const isError = error instanceof Error;
|
const isError = error instanceof Error;
|
||||||
const message = isError ? error.message : '';
|
const message = isError ? error.message : '';
|
||||||
const options = isError ? { cause: error } : { errorResponse: error };
|
const options = isError ? { cause: error } : { errorResponse: error };
|
||||||
super(message, options);
|
super(message, options);
|
||||||
|
|
||||||
|
if (error instanceof NodeError) {
|
||||||
|
this.level = 'error';
|
||||||
|
this.message = `[RE-WRAPPED]: ${message}`;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -6,11 +6,17 @@ import { NodeOperationError } from '@/errors/node-operation.error';
|
||||||
describe('NodeError', () => {
|
describe('NodeError', () => {
|
||||||
const node = mock<INode>();
|
const node = mock<INode>();
|
||||||
|
|
||||||
it('should prevent errors from being re-wrapped', () => {
|
it('should update re-wrapped error level and message', () => {
|
||||||
const apiError = new NodeApiError(node, mock({ message: 'Some error happened', code: 500 }));
|
const apiError = new NodeApiError(node, mock({ message: 'Some error happened', code: 500 }));
|
||||||
const opsError = new NodeOperationError(node, mock());
|
const opsError = new NodeOperationError(node, mock(), { message: 'Some operation failed' });
|
||||||
|
const wrapped1 = new NodeOperationError(node, apiError);
|
||||||
|
const wrapped2 = new NodeOperationError(node, opsError);
|
||||||
|
|
||||||
expect(new NodeOperationError(node, apiError)).toEqual(apiError);
|
expect(wrapped1.level).toEqual('error');
|
||||||
expect(new NodeOperationError(node, opsError)).toEqual(opsError);
|
expect(wrapped1.message).toEqual(
|
||||||
|
'[RE-WRAPPED]: The service was not able to process your request',
|
||||||
|
);
|
||||||
|
expect(wrapped2.level).toEqual('error');
|
||||||
|
expect(wrapped2.message).toEqual('[RE-WRAPPED]: Some operation failed');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue