typescript-node: Use HttpError class when rejecting promises (#3876)

* Use HttpError class when rejecting promises

Fixes #3872

* Update samples

* Test the new code in client.ts
This commit is contained in:
aeb-sia 2019-09-12 14:44:56 +02:00 committed by Esteban Gehring
parent 3242949e1a
commit dc2907aced
11 changed files with 88 additions and 42 deletions

View File

@ -8,5 +8,12 @@ import { {{ classname }} } from './{{ classFilename }}';
export * from './{{ classFilename }}Interface'
{{/withInterfaces}}
{{/apis}}
import http = require('http');
export class HttpError extends Error {
constructor (public response: http.{{#supportsES6}}IncomingMessage{{/supportsES6}}{{^supportsES6}}ClientResponse{{/supportsES6}}, public body: any, public statusCode?: number) {
super('HTTP request failed');
this.name = 'HttpError';
}
}
export const APIS = [{{#apis}}{{#operations}}{{ classname }}{{/operations}}{{^-last}}, {{/-last}}{{/apis}}];
{{/apiInfo}}

View File

@ -22,6 +22,8 @@ import { OAuth } from '../model/models';
{{/authMethods}}
{{/hasAuthMethods}}
import { HttpError } from './apis';
let defaultBasePath = '{{{basePath}}}';
// ===============================================
@ -222,7 +224,7 @@ export class {{classname}} {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});

View File

@ -4,4 +4,11 @@ export * from './storeApi';
import { StoreApi } from './storeApi';
export * from './userApi';
import { UserApi } from './userApi';
import http = require('http');
export class HttpError extends Error {
constructor (public response: http.ClientResponse, public body: any, public statusCode?: number) {
super('HTTP request failed');
this.name = 'HttpError';
}
}
export const APIS = [PetApi, StoreApi, UserApi];

View File

@ -21,6 +21,8 @@ import { ObjectSerializer, Authentication, VoidAuth } from '../model/models';
import { OAuth } from '../model/models';
import { ApiKeyAuth } from '../model/models';
import { HttpError } from './apis';
let defaultBasePath = 'http://petstore.swagger.io/v2';
// ===============================================
@ -129,7 +131,7 @@ export class PetApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});
@ -188,7 +190,7 @@ export class PetApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});
@ -249,7 +251,7 @@ export class PetApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});
@ -310,7 +312,7 @@ export class PetApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});
@ -368,7 +370,7 @@ export class PetApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});
@ -425,7 +427,7 @@ export class PetApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});
@ -492,7 +494,7 @@ export class PetApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});
@ -561,7 +563,7 @@ export class PetApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});

View File

@ -19,6 +19,8 @@ import { Order } from '../model/order';
import { ObjectSerializer, Authentication, VoidAuth } from '../model/models';
import { ApiKeyAuth } from '../model/models';
import { HttpError } from './apis';
let defaultBasePath = 'http://petstore.swagger.io/v2';
// ===============================================
@ -120,7 +122,7 @@ export class StoreApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});
@ -171,7 +173,7 @@ export class StoreApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});
@ -227,7 +229,7 @@ export class StoreApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});
@ -283,7 +285,7 @@ export class StoreApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});

View File

@ -18,6 +18,8 @@ import { User } from '../model/user';
import { ObjectSerializer, Authentication, VoidAuth } from '../model/models';
import { HttpError } from './apis';
let defaultBasePath = 'http://petstore.swagger.io/v2';
// ===============================================
@ -117,7 +119,7 @@ export class UserApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});
@ -172,7 +174,7 @@ export class UserApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});
@ -227,7 +229,7 @@ export class UserApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});
@ -282,7 +284,7 @@ export class UserApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});
@ -338,7 +340,7 @@ export class UserApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});
@ -407,7 +409,7 @@ export class UserApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});
@ -455,7 +457,7 @@ export class UserApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});
@ -517,7 +519,7 @@ export class UserApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});

View File

@ -4,4 +4,11 @@ export * from './storeApi';
import { StoreApi } from './storeApi';
export * from './userApi';
import { UserApi } from './userApi';
import http = require('http');
export class HttpError extends Error {
constructor (public response: http.ClientResponse, public body: any, public statusCode?: number) {
super('HTTP request failed');
this.name = 'HttpError';
}
}
export const APIS = [PetApi, StoreApi, UserApi];

View File

@ -21,6 +21,8 @@ import { ObjectSerializer, Authentication, VoidAuth } from '../model/models';
import { OAuth } from '../model/models';
import { ApiKeyAuth } from '../model/models';
import { HttpError } from './apis';
let defaultBasePath = 'http://petstore.swagger.io/v2';
// ===============================================
@ -129,7 +131,7 @@ export class PetApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});
@ -188,7 +190,7 @@ export class PetApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});
@ -249,7 +251,7 @@ export class PetApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});
@ -310,7 +312,7 @@ export class PetApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});
@ -368,7 +370,7 @@ export class PetApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});
@ -425,7 +427,7 @@ export class PetApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});
@ -492,7 +494,7 @@ export class PetApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});
@ -561,7 +563,7 @@ export class PetApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});

View File

@ -19,6 +19,8 @@ import { Order } from '../model/order';
import { ObjectSerializer, Authentication, VoidAuth } from '../model/models';
import { ApiKeyAuth } from '../model/models';
import { HttpError } from './apis';
let defaultBasePath = 'http://petstore.swagger.io/v2';
// ===============================================
@ -120,7 +122,7 @@ export class StoreApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});
@ -171,7 +173,7 @@ export class StoreApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});
@ -227,7 +229,7 @@ export class StoreApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});
@ -283,7 +285,7 @@ export class StoreApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});

View File

@ -18,6 +18,8 @@ import { User } from '../model/user';
import { ObjectSerializer, Authentication, VoidAuth } from '../model/models';
import { HttpError } from './apis';
let defaultBasePath = 'http://petstore.swagger.io/v2';
// ===============================================
@ -117,7 +119,7 @@ export class UserApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});
@ -172,7 +174,7 @@ export class UserApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});
@ -227,7 +229,7 @@ export class UserApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});
@ -282,7 +284,7 @@ export class UserApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});
@ -338,7 +340,7 @@ export class UserApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});
@ -407,7 +409,7 @@ export class UserApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});
@ -455,7 +457,7 @@ export class UserApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});
@ -517,7 +519,7 @@ export class UserApi {
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
resolve({ response: response, body: body });
} else {
reject({ response: response, body: body });
reject(new HttpError(response, body, response.statusCode));
}
}
});

View File

@ -155,5 +155,16 @@ petApi.addPet(pet)
})
.then((res) => {
console.log('Deleted pet');
process.exit(exitCode);
// process.exit(exitCode);
petApi.deletePet(petId).then((res) => {
throw new Error('Unexpected success');
}).catch((e) => {
if (e instanceof Error && e.name === 'HttpError' && e.message === 'HTTP request failed') {
console.log('Throws Http Errors correctly');
process.exit(exitCode);
} else {
throw new Error(`Throws unexpected error:\n ${e}`);
}
});
// process.exit(exitCode);
});