使用koa.js + axios获取错误消息

时间:2017-12-01 14:40:32

标签: javascript node.js axios koa

我在后端使用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);
  }
};

enter image description here

带有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);
      });
  };
}

enter image description here

1 个答案:

答案 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