Skip to content
This repository was archived by the owner on Feb 26, 2024. It is now read-only.

Commit 5c704f1

Browse files
committed
fix: Catch a handleRequest error and return as a failed server response
1 parent d256dbb commit 5c704f1

File tree

5 files changed

+68
-65
lines changed

5 files changed

+68
-65
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# "angular-in-memory-web-api" versions
22

3+
<a name="0.1.10"></a>
4+
## 0.1.10 (2016-10-19)
5+
* Catch a `handleRequest` error and return as a failed server response.
6+
37
<a name="0.1.9"></a>
48
## 0.1.9 (2016-10-18)
59
* Restore delay option, issue #53.

in-memory-backend.service.js

Lines changed: 32 additions & 31 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

in-memory-backend.service.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "angular-in-memory-web-api",
3-
"version": "0.1.9",
3+
"version": "0.1.10",
44
"description": "An in-memory web api for Angular demos and tests",
55
"main":"index.js",
66
"jsnext:main": "esm/index.js",

src/in-memory-backend.service.ts

Lines changed: 30 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -235,9 +235,15 @@ export class InMemoryBackendService {
235235
this.setPassThruBackend();
236236
}
237237

238-
239238
createConnection(req: Request): Connection {
240-
const response = this.handleRequest(req);
239+
let response: Observable<Response>;
240+
try {
241+
response = this.handleRequest(req);
242+
} catch (error) {
243+
const err = error.message || error;
244+
const options = createErrorResponse(STATUS.INTERNAL_SERVER_ERROR, `${err}`);
245+
response = this.createDelayedObservableResponse(options);
246+
}
241247
return {
242248
readyState: ReadyState.Done,
243249
request: req,
@@ -294,40 +300,32 @@ export class InMemoryBackendService {
294300
const reqMethodName = RequestMethod[req.method || 0].toLowerCase();
295301
let resOptions: ResponseOptions;
296302

297-
try {
298-
if ('commands' === reqInfo.base.toLowerCase()) {
299-
return this.commands(reqInfo);
300-
301-
} else if (this.inMemDbService[reqMethodName]) {
302-
// If service has an interceptor for an HTTP method, call it
303-
const interceptorArgs: HttpMethodInterceptorArgs = {
304-
requestInfo: reqInfo,
305-
db: this.db,
306-
config: this.config,
307-
passThruBackend: this.passThruBackend
308-
};
309-
// The result which must be Observable<Response>
310-
return this.addDelay(this.inMemDbService[reqMethodName](interceptorArgs));
311-
312-
} else if (reqInfo.collection) {
313-
return this.collectionHandler(reqInfo);
314-
315-
} else if (this.passThruBackend) {
316-
// Passes request thru to a "real" backend which returns an Observable<Response>
317-
// BAIL OUT with this Observable<Response>
318-
return this.passThruBackend.createConnection(req).response;
303+
if ('commands' === reqInfo.base.toLowerCase()) {
304+
return this.commands(reqInfo);
319305

320-
} else {
321-
resOptions = createErrorResponse(STATUS.NOT_FOUND, `Collection '${collectionName}' not found`);
322-
return this.createDelayedObservableResponse(resOptions);
323-
}
306+
} else if (this.inMemDbService[reqMethodName]) {
307+
// If service has an interceptor for an HTTP method, call it
308+
const interceptorArgs: HttpMethodInterceptorArgs = {
309+
requestInfo: reqInfo,
310+
db: this.db,
311+
config: this.config,
312+
passThruBackend: this.passThruBackend
313+
};
314+
// The result which must be Observable<Response>
315+
return this.addDelay(this.inMemDbService[reqMethodName](interceptorArgs));
324316

325-
} catch (error) {
326-
const err = error.message || error;
327-
resOptions = createErrorResponse(STATUS.INTERNAL_SERVER_ERROR, `${err}`);
317+
} else if (reqInfo.collection) {
318+
return this.collectionHandler(reqInfo);
319+
320+
} else if (this.passThruBackend) {
321+
// Passes request thru to a "real" backend which returns an Observable<Response>
322+
// BAIL OUT with this Observable<Response>
323+
return this.passThruBackend.createConnection(req).response;
324+
325+
} else {
326+
resOptions = createErrorResponse(STATUS.NOT_FOUND, `Collection '${collectionName}' not found`);
328327
return this.createDelayedObservableResponse(resOptions);
329328
}
330-
331329
}
332330

333331
/**

0 commit comments

Comments
 (0)