我在 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 确实显示了预期的消息。我很困惑,任何帮助将不胜感激。