Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 客户端(react)无法从服务器(express)访问响应_Node.js_Express - Fatal编程技术网

Node.js 客户端(react)无法从服务器(express)访问响应

Node.js 客户端(react)无法从服务器(express)访问响应,node.js,express,Node.js,Express,我正在为一个express.js服务器设计一条发布路线。我有一个验证函数,如果没有通过,它将返回一个包含消息的400代码。客户端(React)接收400代码,但我无法访问服务器发送的消息 这是express中的POST: const { error } = validate(req.body); if (error) return res .status(400) .send(error.details[0].message); 这是React中的提交例程:

我正在为一个express.js服务器设计一条发布路线。我有一个验证函数,如果没有通过,它将返回一个包含消息的400代码。客户端(React)接收400代码,但我无法访问服务器发送的消息

这是express中的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”,但没有得到不同的结果

然而,如果我测试邮递员,它就像一个魅力!使用相同的输入,我得到状态代码和消息

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


谢谢。

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

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

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

您使用哪个http请求库来实现hit api?@ChandanKumar嘿,在这里,使用axios。最后一个问题:是的,您应该始终验证服务器上的数据。验证只是最佳实践,但问题不同,它与验证无关。我尝试了这个sintax,但我得到了相同的行为。我得到的是错误的请求响应,但不是服务器发送的消息。