【问题标题】:handling error response from express to react处理来自 express 的错误响应以做出反应
【发布时间】:2018-02-11 01:02:30
【问题描述】:

当用户添加非唯一类别或根本没有类别时,我正在尝试发送错误响应并表达 api 调用出错。我能够将类别保存到数据库并发回正确的响应。我不确定我在 express 中使用了正确的响应方法。

快递:

exports.addCategory = (req, res, next) => {
  var category = new Category(req.body);
  category.save().then(doc => {
    res.send(doc);
  }).catch(err => {
    res.send({message:'Category must be unique!'});
  });

}

反应

export function addCategoryName( name ){
  return (dispatch) => {
    const dbPost = axios.post('/api/add-category', {name:name});
    dbPost.then(result => {
      console.log("result = ", result);
      dispatch({
        type: type.ADD_CATEGORY_NAME,
        payload: result.data
      });
    }).catch(err => {
      console.log("CATCH = ", err);
      // dispatch({
      //   type: type.ADD_CATEGORY_NAME_ERROR,
      //   payload: err.message
      // });
    });
  }
}

上面的响应直接到达 dbPost.then(result => { 而不是 catch。 所以我尝试了

表达回应

res.status(err.statusCode || 500).json({message:msg});

这给了我:

CATCH =  Error: Request failed with status code 500
    at createError (createError.js:15)
    at settle (settle.js:18)
    at XMLHttpRequest.handleLoad (xhr.js:77)

我要做的就是用 express 的错误消息进行响应,并且我的 axios 承诺将其作为错误捕获。但我似乎无法得到错误信息。 作为对此的回应,我在快递中是否缺少一些东西。

【问题讨论】:

  • 不是重复的。我的问题是为什么我的 axios 调用中的 catch 方法没有捕获错误消息。这就是为什么我问它是否与表达反应有关,但我越看它不是表达。但是感谢您的回复和链接
  • 它没有捕获错误消息,因为结果不是错误。如果您希望结果为错误,则需要设置错误代码(如重复...)
  • 我尝试设置错误代码 res.status(500).send({ error: "boo:(" }); 问题是这转到 then( result ) 而不是 catch(error ) 在 axios 承诺中。不知道你所说的错误代码是什么意思
  • 你看到服务器的响应是500了吗?

标签: reactjs express mongoose redux


【解决方案1】:

所以事实证明这不是我的明确回应,而是我需要添加的事实 console.log("CATCH = ", err.response);在我的 axios 承诺中反应。我错过了 response 对象。我不知道我需要那个。

完整的代码,以防其他人有同样的问题。

反应:

export function addCategoryName( name ){
  return (dispatch) => {
    const dbPost = axios.post('/api/add-category', {name:name});
    dbPost.then(result => {
      console.log("result = ", result);
      dispatch({
        type: type.ADD_CATEGORY_NAME,
        payload: result.data
      });
    }).catch(err => {
      console.log("CATCH = ", err.response);
       dispatch({
         type: type.ADD_CATEGORY_NAME_ERROR,
         payload: error.response.data.error
       });
    });
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-12
    • 2014-02-04
    • 2020-02-03
    • 1970-01-01
    • 2013-04-10
    • 2017-05-25
    • 2016-03-23
    • 2018-06-20
    相关资源
    最近更新 更多