创建后对象键消失

问题描述 投票:0回答:0

我在 typescript 和 Nodejs 中有一个非常简单的 API,我遇到了一个非常奇怪的问题,创建后我的错误对象上的“消息”键丢失了。

这是创建错误对象的函数, 如果我 console.log,这里的消息仍然存在。

export function createNewError(status: number, message: string): customError {
    const err = new Error(message) as customError;
    err.error = message;
    err.message = getErrorMessageFromStatus(status);
    err.status = status;
    err.success = false;
    return err;
}

但是就在我调用函数的地方,消息是未定义的。 我是从 try catch 块中调用它的。

catch (caught: any) {
        const errorToSend = createNewError(
            statusCodes.INTERNAL_SERVER_ERROR,
            getErrorMessage(caught)
        );
        res.status(errorToSend.status).json(errorToSend);
}

如果我记录 caught 错误,这是预期的。所以没有什么可以来自那里。事实上,我收到了预期的结果,但没有得到预期的结果。

此错误仅发生在我的一个 API 路由上,即更新路由,其余路由使用消息密钥传递实际错误。

如果有帮助,这里是 customError 接口。

export interface customError extends Error {
  error: any;
  message: string;
  status: number;
  success: boolean;
}

还有 getErrorMessageFromStatus 函数。

export function getErrorMessageFromStatus(status: number): string {
    switch (status) {
        case statusCodes.BAD_REQUEST:
            return statusMessages.BAD_REQUEST;
        case statusCodes.UNAUTHORIZED:
            return statusMessages.UNAUTHORIZED;
        case statusCodes.FORBIDDEN:
            return statusMessages.FORBIDDEN;
        case statusCodes.NOT_FOUND:
            return statusMessages.NOT_FOUND;
        case statusCodes.INTERNAL_SERVER_ERROR:
            return statusMessages.INTERNAL_SERVER_ERROR;
        default:
            return statusMessages.INTERNAL_SERVER_ERROR;
    }
}

我已经尝试从 createCustomError 函数内部以及调用该函数之前和之后进行记录。 Object.keys(errorToSend) 没有将消息显示为键,console.log 确实显示了预期的消息。我很困惑,任何帮助将不胜感激。

node.js typescript express
© www.soinside.com 2019 - 2024. All rights reserved.