在后端使用Typescript时,可以通过自定义错误来处理异常情况,并避免代码重复。以下是一个解决方案的示例代码:
// CustomError.ts
class CustomError extends Error {
constructor(public message: string, public errorCode: number) {
super(message);
this.name = "CustomError";
}
}
export default CustomError;
// errorHandler.ts
import { Request, Response, NextFunction } from "express";
import CustomError from "./CustomError";
export const errorHandler = (
err: Error,
req: Request,
res: Response,
next: NextFunction
) => {
if (err instanceof CustomError) {
return res.status(err.errorCode).json({ error: err.message });
}
console.error(err); // Log the error for debugging
return res.status(500).json({ error: "Internal Server Error" });
};
// exampleController.ts
import { Request, Response, NextFunction } from "express";
import CustomError from "./CustomError";
export const exampleController = (
req: Request,
res: Response,
next: NextFunction
) => {
try {
// Some business logic here
const data = fetchDataFromDatabase();
if (!data) {
throw new CustomError("Data not found", 404);
}
return res.json(data);
} catch (error) {
next(error);
}
};
// index.ts
import express from "express";
import { exampleController } from "./exampleController";
import { errorHandler } from "./errorHandler";
const app = express();
app.get("/example", exampleController);
app.use(errorHandler);
app.listen(3000, () => {
console.log("Server is running on port 3000");
});
在上述示例中,我们定义了一个名为CustomError
的自定义错误类,它继承自Error
类,并添加了一个自定义的错误码属性errorCode
。在exampleController
中,我们可以根据业务逻辑中的条件抛出CustomError
来处理异常情况,并将错误传递给errorHandler
进行统一处理。
errorHandler
中的逻辑会根据错误类型判断错误的来源,并根据错误码返回相应的错误响应。如果错误不是CustomError
的实例,则会返回一个默认的"Internal Server Error"响应。
最后,在index.ts
中,我们创建了一个Express应用程序,并使用exampleController
处理/example
路由的请求。同时,我们使用errorHandler
中间件来处理应用程序中抛出的错误。
这种方式可以避免在多个地方编写重复的错误处理逻辑,提高代码的可维护性,并使错误处理更加统一和易于管理。