客户端(反应)无法访问服务器(快速)的响应

时间:2019-02-03 14:01:46

标签: node.js express

我正在为express.js服务器发布路由。我有一个验证函数,如果未通过验证,则返回带有消息的400代码。客户端(React)收到了400码,但是我无法访问服务器发送的消息。

这是快递中的POST:

const { error } = validate(req.body);
  if (error)
    return res
      .status(400)
      .send(error.details[0].message);

这是React中的提交例程:

 doSubmit = async () => {   
    const { username, password } = this.state.data;
    const result = await login({ mail: username, password });
    console.log('result', result);
  };

登录仅是axios.post方法的包装:

export async function login(user) {
  try {
    return await http.post(apiEndpoint, user);
  } catch (ex) {
    console.log(ex.message);
    return ex;
  }
}

当前,代码按原样工作。提交无效的输入(例如密码少于5个字符),我在客户端得到以下信息:

POST http://localhost:3000/api/auth 400 (Bad Request)

Request failed with status code 400

result Error: Request failed with status code 400
    at createError (createError.js:17)
    at settle (settle.js:19)
    at XMLHttpRequest.handleLoad (xhr.js:78)
    at XMLHttpRequest.wrapped (raven.js:363)

但是,如果我将服务器发送的状态代码更改为“ 200”,则会得到:

结果{ 这里有完整的响应以及数据属性。 数据:““密码”的长度必须至少为5个字符” }

我一直在阅读Express文档。它没有说明如果代码为400则不发送响应(尽管在错误请求时不发送任何内容是有意义的)。我也对'body-parser'玩了一点,但没有得到不同的结果。

但是,如果我在邮递员中测试,它的工作原理就像一种魅力!使用相同的输入,我会得到状态码和消息。

最后,可以验证发送的输入(客户端)和接收的数据(服务器)对吗?如果是这样,假设客户端输入正确,但服务器不正确。服务器应该以任何问题(我要解决的问题)做出响应,还是简单地说“ ERROR”(当前情况)?

谢谢。

2 个答案:

答案 0 :(得分:1)

Axios代码示例,可能会给出代码来解决您的问题。问题出在您的参数上。

axios({
      url: '/login',
      method: 'post',
      params: { username: 'cedas', password: 'fredsed' }
    }).then(response => {
      resolve(response)
    })
      .catch(error => {
        reject(error)
      });
  })

答案 1 :(得分:0)

最后,问题出在访问 ex.message ,而不是 ex.response ...干杯。