【问题标题】:Client (react) cannot access response from Server (express)客户端(反应)无法访问来自服务器(快递)的响应
【发布时间】:2019-06-27 10:56:22
【问题描述】:

我正在开发 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);
  };

Login 只是 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”,我会得到:

结果{ 此处的完整响应以及数据属性.. data: ""password" 长度必须至少为 5 个字符" }

我一直在阅读 Express 文档。如果代码为 400,它并没有说明不发送响应(尽管如果 bad request 不发送任何内容是有意义的)。我也玩弄了一些“body-parser”,但没有得到不同的结果。

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

最后,验证发送的输入(客户端)和接收的数据(服务器)都可以吗?如果是这样,假设客户端可以输入,但服务器不是。服务器应该响应任何问题(我想要实现的目标),还是简单地说“错误”(当前场景)?

谢谢。

【问题讨论】:

  • 你使用哪个http请求库来获取hit api?
  • @ChandanKumar 嘿,使用 axios。
  • 最后一个问题:是的,您应该始终验证服务器上的数据。
  • 验证只是最佳实践,但问题不同,它与验证无关。

标签: node.js express


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    Axios 代码示例,可能会给出修复您问题的代码。问题在于您的参数。

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

    【讨论】:

    • 我已经尝试过这个sintax,但我得到了同样的行为。我收到 bad request 响应,但没有收到服务器发送的消息。
    猜你喜欢
    • 2019-04-07
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    • 2019-12-18
    • 1970-01-01
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    相关资源
    最近更新 更多