在express中处理javascript错误
假设我有以下异步函数在express中处理javascript错误,javascript,node.js,express,error-handling,Javascript,Node.js,Express,Error Handling,假设我有以下异步函数 export async function someAsyncFunction() { const result = await fetchData(); return result[0].id; } 在我的路线上 router.post( '/some-path', handleErrorAsync(async (req: Request, resp: Response, _err: Errback) => { const data = a
export async function someAsyncFunction() {
const result = await fetchData();
return result[0].id;
}
在我的路线上
router.post(
'/some-path',
handleErrorAsync(async (req: Request, resp: Response, _err: Errback) => {
const data = await someAsyncFunction();
resp.json(data)
})
);
我有错误处理功能,可以
interface ResponseError extends Error {
statusCode: number;
}
// Middleware to respond with an error when error caught
export function handleError(
err: ResponseError,
_req: Request,
resp: Response,
_next: NextFunction
) {
if (err) {
resp.status(err.statusCode || 500).json(err);
}
}
export const handleErrorAsync = (func: Function) => (
req: Request,
res: Response,
next: NextFunction
) => {
func(req, res, next).catch((error: Error) => {
next(error);
});
};
因此,如果例如fetchData
有一个错误响应对象,那么这可以很好地工作,但是当错误是一个常规javascript错误时,它无法打印错误对象,而只是打印带有500个错误的{}
例如,此行返回结果[0].id
如果结果为空([]
),则会抛出TypeError
,这将被handleError
中间件捕获,但是.json(err)
部分将只显示{}
是否有一种方法可以使用同一中间件获取服务器错误(正常工作)和内部服务器错误?res.json do json.parse,它返回一个空对象{}。
我可以建议对err主体进行分解
resp.status(err.statusCode | | 500).json({message:err.message,err:err});
这将为每个返回空对象{}的本机错误res.json do json.parse提供一条消息。
我可以建议对err主体进行分解
resp.status(err.statusCode | | 500).json({message:err.message,err:err});
这将为每个本机错误提供一条消息您可以扩展
到json
错误方法
let a=新错误(“hi”)
log(JSON.stringify(a))
Error.prototype.toJSON=函数(){
常量alt={};
//取得全部财产
Object.getOwnPropertyNames(this.forEach)((键)=>{
alt[键]=此[键];
});
//仅获取消息属性
//alt[“message”]=此[“message”]
返回alt;
}
console.log(JSON.stringify(a))
您可以扩展到JSON
错误方法
let a=新错误(“hi”)
log(JSON.stringify(a))
Error.prototype.toJSON=函数(){
常量alt={};
//取得全部财产
Object.getOwnPropertyNames(this.forEach)((键)=>{
alt[键]=此[键];
});
//仅获取消息属性
//alt[“message”]=此[“message”]
返回alt;
}
log(JSON.stringify(a))
我建议在错误处理程序中使用res.send()
return res.status(500).send(err.message);
我建议在错误处理程序中使用res.send()
return res.status(500).send(err.message);
我使用
我使用
谢谢你的回答,谢谢你的链接,它引导我使用它,并解决了这个问题!谢谢你的回答,谢谢你的链接,它引导我使用它,并解决了这个问题!谢谢这有帮助!另一个解决方案是使用谢谢!这有帮助!另一个解决办法是使用