Skip to content

Commit

Permalink
error processing
Browse files Browse the repository at this point in the history
  • Loading branch information
pestsov-v committed Feb 15, 2022
1 parent 32e4cc4 commit c24e8e8
Show file tree
Hide file tree
Showing 6 changed files with 53 additions and 4 deletions.
12 changes: 10 additions & 2 deletions src/app.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import express, {Express} from 'express';
import { Server} from 'http';
import { ExeptionFilter } from './errors/exeption.filter';
import { LoggerService } from './logger/logger.service';
import { UserController } from './users/users.controller';

Expand All @@ -8,21 +9,28 @@ export class App {
server: Server;
port: number;
logger: LoggerService;
userController: UserController
userController: UserController;
exeptionFilter: ExeptionFilter;

constructor(logger: LoggerService, userController: UserController) {
constructor(logger: LoggerService, userController: UserController, exeptionFilter: ExeptionFilter) {
this.app = express();
this.port = 8000;
this.logger = logger;
this.userController = userController;
this.exeptionFilter = exeptionFilter;
}

useRoutes() {
this.app.use('/users', this.userController.router);
}

useExeptionFilter() {
this.app.use(this.exeptionFilter.catch.bind(this.exeptionFilter))
}

public async init() {
this.useRoutes();
this.useExeptionFilter();
this.server = this.app.listen(this.port);
this.logger.log(`Сервер запущен на http://localhost:${this.port}`);
}
Expand Down
5 changes: 5 additions & 0 deletions src/errors/exeption.filter.interface.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { Request, Response, NextFunction } from "express";

export interface IExeptionFilter {
catch: (err: Error, req: Request, res: Response, next: NextFunction) => void
}
21 changes: 21 additions & 0 deletions src/errors/exeption.filter.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { NextFunction, Request, Response } from "express";
import { LoggerService } from "../logger/logger.service";
import { IExeptionFilter } from "./exeption.filter.interface";
import { HTTPError } from "./http-error.class";

export class ExeptionFilter implements IExeptionFilter{
logger: LoggerService;
constructor(logger: LoggerService) {
this.logger = logger;
}

catch (err: Error | HTTPError, req: Request, res: Response, next: NextFunction) {
if (err instanceof HTTPError) {
this.logger.error(`[${err.context}] Ошибка ${err.statusCode}: ${err.message}`);
res.status(err.statusCode).send({err: err.message});
} else {
this.logger.error(`${err.message}`);
res.status(500).send({err: err.message});
}
}
}
13 changes: 13 additions & 0 deletions src/errors/http-error.class.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
export class HTTPError extends Error {
statusCode: number;
context?: string;

constructor(statusCode: number, message: string, context?: string) {
super(message);
this.statusCode = statusCode;
this.message = message;
this.context = context;
}


}
3 changes: 2 additions & 1 deletion src/main.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import { App } from "./app";
import { ExeptionFilter } from "./errors/exeption.filter";
import { LoggerService } from "./logger/logger.service";
import { UserController } from "./users/users.controller";

async function bootstrap() {
const logger = new LoggerService();
const app = new App(logger, new UserController(logger));
const app = new App(logger, new UserController(logger), new ExeptionFilter(logger));
await app.init();
}

Expand Down
3 changes: 2 additions & 1 deletion src/users/users.controller.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { NextFunction, Request, Response } from "express";
import { BaseController } from "../common/base.controller";
import { HTTPError } from "../errors/http-error.class";
import { LoggerService } from "../logger/logger.service";

export class UserController extends BaseController{
Expand All @@ -12,7 +13,7 @@ export class UserController extends BaseController{
}

login (req: Request, res: Response, next: NextFunction) {
this.ok(res, 'login')
next(new HTTPError(401, 'Ошибка авторизации', 'login'))
}

register(req: Request, res: Response, next: NextFunction) {
Expand Down

0 comments on commit c24e8e8

Please sign in to comment.