fix(core): Ensure status on Axios errors is available to the BE (#9015)

This commit is contained in:
Iván Ovejero 2024-04-03 18:00:27 +02:00 committed by GitHub
parent 042aa62fc2
commit 744327c20d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 15 additions and 0 deletions

View file

@ -848,6 +848,11 @@ export async function proxyRequestToAxios(
error.message = `${response.status as number} - ${JSON.stringify(responseData)}`; error.message = `${response.status as number} - ${JSON.stringify(responseData)}`;
throw Object.assign(error, { throw Object.assign(error, {
statusCode: response.status, statusCode: response.status,
/**
* Axios adds `status` when serializing, causing `status` to be available only to the client.
* Hence we add it explicitly to allow the backend to use it when resolving expressions.
*/
status: response.status,
error: responseData, error: responseData,
response: pick(response, ['headers', 'status', 'statusText']), response: pick(response, ['headers', 'status', 'statusText']),
}); });

View file

@ -243,6 +243,16 @@ describe('NodeExecuteFunctions', () => {
hooks.executeHookFunctions.mockClear(); hooks.executeHookFunctions.mockClear();
}); });
test('should rethrow an error with `status` property', async () => {
nock(baseUrl).get('/test').reply(400);
try {
await proxyRequestToAxios(workflow, additionalData, node, `${baseUrl}/test`);
} catch (error) {
expect(error.status).toEqual(400);
}
});
test('should not throw if the response status is 200', async () => { test('should not throw if the response status is 200', async () => {
nock(baseUrl).get('/test').reply(200); nock(baseUrl).get('/test').reply(200);
await proxyRequestToAxios(workflow, additionalData, node, `${baseUrl}/test`); await proxyRequestToAxios(workflow, additionalData, node, `${baseUrl}/test`);