【问题标题】:getting bad request instead of full error message收到错误的请求而不是完整的错误消息
【发布时间】:2018-07-26 00:14:40
【问题描述】:

我正在尝试使用以下相同的用户电子邮件对POST 进行错误处理(使用superagent):

export function signUpUser(userData) {
  return async dispatch => {
    try {
      const currentUser = await request.post(`${url}/signup`).send(userData);
      set(window.localStorage, 'x-auth', currentUser);
      dispatch(signUpSuccessObject(userData));
    } catch (error) {
      dispatch(signUpFailObject(error));
    }
  };
}

我想在我的网络标签中看到以下内容:

{"name":"SequelizeUniqueConstraintError","errors":[{"message":"email 必须是唯一的","type":"unique 违规","路径":"email","value":"leo@fsl.co","origin":"DB","instance":

但我得到的只是:

错误请求

我的 API 控制器:

User.create(
      Object.assign(req.body, {
        password: bcrypt.hashSync(req.body.password, 10),
      })
    )
      .then(() => {
        const myToken = jwt.sign({email: req.body.email}, 'leogoesger');
        res.status(200).send(myToken);
      })
      .catch(err => res.status(400).send(err));
  },

【问题讨论】:

  • 状态 400(又名“错误请求”)表示客户端错误(例如语法错误、大小过大等)。这并不是您的错误的真正来源,特别是在数据库字段验证失败的情况下。您是否尝试过发回不同的状态代码以查看是否是阻止您看到错误客户端的原因?我的猜测是,浏览器的默认行为可能会接管某些特定的状态码,而 400 可能就是其中之一?
  • 显然,对于像您这样的情况使用什么状态代码的选择还有待商榷。请参阅stackoverflow.com/questions/19671317/… - 那里有一些非常有趣的答案和 cmets。
  • 问题是error 在调度中。我应该使用的是error.response。奇怪的是它与onSuccess case 的工作方式不同。

标签: node.js reactjs express superagent


【解决方案1】:

https://github.com/visionmedia/superagent/issues/1074

^^ 以此为参考。

基本上,我需要error.response。这将给我整个对象,这将允许我访问错误消息。

所以完整的工作代码是:

export function signUpUser(userData) {
  return async dispatch => {
    try {
      const currentUser = await request
        .post(`${url}/signup`)
        .send(userData)
        .type('json');
      set(window.localStorage, 'x-auth', currentUser);
      dispatch(signUpSuccessObject(userData));
    } catch (e) {
      dispatch(signUpFailObject(e.response.body));
    }
  };
}

【讨论】:

    【解决方案2】:

    res.send() 将发送简单的text/html 响应。

    res.json(myToken)res.status(400).json(err) 用于JSON API。

    【讨论】:

      猜你喜欢
      • 2022-11-20
      • 2019-04-13
      • 2019-01-30
      • 2020-07-27
      • 1970-01-01
      • 1970-01-01
      • 2018-07-25
      • 2023-03-17
      • 1970-01-01
      相关资源
      最近更新 更多