TypeScript 自定义错误类:未显示修改后的错误消息

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

我在使用 TypeScript 中的自定义错误类时遇到问题,其中修改后的错误消息无法正确显示,我只是收到从 API 调用返回的错误消息。 我的自定义错误类--

export class CustomError extends Error {
    cod:string;
    constructor(cod:string , message: string){
        super(message);
        this.cod = cod;
        Object.setPrototypeOf(this , new.target.prototype);

        if (Error.captureStackTrace) {
            Error.captureStackTrace(this, this.constructor);
        }
    }
}

继承的类--

import { CustomError } from "./CustomError";

export class CityNotFoundError extends CustomError {
    constructor(cod:string , message: string){
        const errMsg:string = message + " :The city you provided was not found,Please verify"
        super(cod,errMsg);
    }
}

错误处理函数。

import { CityNotFoundError } from "../Errors/CityNotFoundError";
export function ErrorHandler(cod: string , message: string){
    switch(cod){
        case '404':
            const errMsg:string = message + " :The city you provided was not found,Please verify"
            return new CityNotFoundError(cod,errMsg);
    }
}

这就是功能

app.get('/',async (req:Request,res:Response) =>{
    await fetch(`https://api.openweathermap.org/data/2.5/weather?q={location}&&appid={API_KEY}`).
    then(async(response) =>{ 
        const data = await response.json();
        console.log(data)
        res.json(data);
    }).
        catch(async(err) =>{
            const error = ErrorHandler(err.cod , err.message)!;
            console.error(error.stack);
            res.status(500).json({
                code: error.cod,
                message: error.message,
            });
        })
})

我收到此错误 { cod: '404', message: '未找到城市' } 但我想要这个.. { cod: '404', message: '未找到城市: :未找到您提供的城市,请验证' }

什么可能导致错误消息未按预期修改的问题?如何确保我在 CityNotFoundError 构造函数中添加的附加上下文在记录时包含在错误消息中?

typescript error-handling
1个回答
0
投票

我发现了这个问题,我只需检查响应 json 是否有不成功的响应,然后抛出错误。

fetch(`https://api.openweathermap.org/data/2.5/weather?q={Location}&&appid={API_KEY}`).
then(async(response) =>{ 
    if(!response.ok){
        const errData = await response.json();
        console.log(errData)
        throw ErrorHandler(errData.cod,errData.message);
    }
    const data = await response.json();
    res.json(output);
© www.soinside.com 2019 - 2024. All rights reserved.