Получение 204 с ответом уже отправляет ошибку из контроллера в inversify- express -utils, когда возвращаются далее (ошибка) - PullRequest
0 голосов
/ 07 апреля 2020

Я получил ошибку 204 без содержимого вместе с ошибкой консоли, Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

из контроллера inversify- express -utils , это каждый раз, когда происходит ** последний метод первого контроллера ** в структуре папок. Я знаю, что это может быть легкой ошибкой. Но я новичок в инвертировании, inversify- express -utils.

Забавно, что , если я перетасовываю методы , каждый раз, когда последний метод завершается с ошибкой 204 без выдачи ошибки.

это мой контроллер ,

import { BaseHttpController, httpPost, httpGet, controller } from "inversify-express-utils"
import { Request, Response, NextFunction } from "express";
import { HttpProblem } from "../../problames/http-problem";

@controller("/userTest")
export class userController extends BaseHttpController {

    @httpPost("/saveUserTestnew")
    public async saveUsernew(req: Request, res: Response, next: NextFunction) {
        return next(new HttpProblem(500,"500", "Error"))
    }

    @httpPost("/saveUserTest")
    public async saveUser(req: Request, res: Response, next: NextFunction) {
        return next(new HttpProblem(500,"500", "Error"))
    }

    @httpGet("/getUser")
    public async  getUser(req: Request, res: Response, next: NextFunction) {
        return next(new HttpProblem(500,"500", "Error"))
    }

}

это мои классы ошибок


import {AbstractProblem} from "./abstract-problem";
export class HttpProblem extends AbstractProblem {
    constructor(statusCode: number, customErrorCode: string, description: string) {
        super(statusCode, customErrorCode, description);
    }
}
import {CustomError} from "ts-custom-error";

export abstract class AbstractProblem extends CustomError {

    private readonly statusCode: number = 500;
    private customErrorCode: string = "";
    private description: string = "";

    protected constructor(statusCode: number, customErrorCode: string, description: string) {
        super(description);
        this.statusCode = statusCode;
        this.customErrorCode = customErrorCode;
        this.description = description;
    }

    public getStatusCode(): number {
        return this.statusCode;
    }
}

Это моя ошибка конфигурации

 // config errors
        server.setErrorConfig((app)=>{
            app.use((err:Error, req:Request, res:Response, next:NextFunction) => {

                // get error translator from container
                let errorTranslate = container.get<ProblemTranslator>(TYPES.Problame);
                // execute process
                errorTranslate.process(err,res);

            });
        })

это проблема переводчика-декоратора


import {Response} from "express";
import {CustomError} from "ts-custom-error";
import {AbstractProblem} from "./abstract-problem";
import { problameHandler } from "../decorators/custom-decorators";

@problameHandler()
export class ProblemTranslator {

    public process(error: Error, response: Response): void {

        let errorResponse = {};
        let statusCode = 500;
        if (!(error instanceof CustomError)) {
            errorResponse = {
                statusCode: 500,
                name: error.name,
                customErrorCode: "Application Logical Error",
                description: error.message,
            };
        } else {
            errorResponse = error;
            const customError: AbstractProblem = error as AbstractProblem;
            statusCode = customError.getStatusCode();
        }

        console.log(errorResponse)

        response.status(statusCode).send(errorResponse);
    }

}

ошибка

enter image description here

и в консоли

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...