我在后端使用koa.js,在前端使用axios用于http请求。我想在koa.js中设置错误消息并在前端获取错误消息,但我只得到默认错误消息“请求失败,状态代码为500”
koa.js api call
module.exports.addIntr = async (ctx, next) => {
const intrObj = ctx.request.body;
try {
intrObj = await compileOneInterest(intrObj);
ctx.response.body = intrObj;
} catch (err) {
const statusCode = err.status || 500;
ctx.throw(statusCode, err.message);
}
};
带有axios的http请求
export function addInter(interObj) {
return (dispatch) => {
const url = `${API_ADDRESS}/ep/${10}/intr/`;
axios({
method: 'post',
url,
data: interObj,
// params: {
// auth: AccessStore.getToken(),
// },
})
.then((response) => {
dispatch(addIntrSuccess(response.data));
})
.catch((error) => {
dispatch(handlePoiError(error.message));
console.log(error.response);
console.log(error.request);
console.log(error.message);
});
};
}
答案 0 :(得分:1)
1)主要问题 compileOneInterest
函数抛出数组而不是Error对象。在您的屏幕截图中,错误为[{message: 'Sorry, that page does not exist', code: 34}]
。您的try块正在运行:
const statusCode = err.status || 500; // undefined || 500
ctx.throw(statusCode, err.message); // ctx.throw(500, undefined);
所以你看到默认消息。
2)您使用类似错误的对象new Error('message')
或CustomError('message', 34)
class CustomError extends Error {
constructor(message, code) {
super(message);
this.code = code;
}
}
最佳做法是抛出错误或自定义错误对象。
3)您的statusCode计算使用err.status
代替err.code
。