React.js - 在网站上授权时,如果数据不正确,我该如何获得文本错误的响应?

Posted

技术标签:

【中文标题】React.js - 在网站上授权时,如果数据不正确,我该如何获得文本错误的响应?【英文标题】:React.js - When authorizing on the site, if the data is incorrect, how can I get a response with a text error? 【发布时间】:2017-12-31 18:07:49 【问题描述】:

我使用电子邮件和密码向 API 发送数据。 API Ruby on Rails 与库 devise-token-auth


signinform.js

.................................................. .......

onSubmit(e)
e.preventDefault();
this.setState(errors: , isLoading: true);
this.props.userSignInRequest(this.state).then(
  () => console.log('ok!'),
  (resp) =>  console.log(resp.errors); 
);

..................................................... .......

actions/signInActions.js

import axios from 'axios';

export function userSignInRequest(userData)
  return dispatch => 
    return axios.post('/auth/sign_in', userData);
  

如果电子邮件或密码不正确,我会收到回复:

"errors":["Invalid login credentials. Please try again."]

但是 console.log(resp.errors);显示未定义。如果我输入(resp) => console.log(resp); 我会进入控制台:

错误:在 XMLHttpRequest.handleLoad (xhr.js?ec6c:77)

我如何在 console.log(resp) 中出现错误;

【问题讨论】:

【参考方案1】:

那是因为你在参数中写resp 的方式。你已经在括号中写了resp,比如resp。这意味着无论何时将任何对象传递给此函数,resp 将等于该对象的resp 属性。但由于响应只有errors 属性,没有resp 属性,所以显示未定义。

因此,您可以这样做

onSubmit(e)
e.preventDefault();
this.setState(errors: , isLoading: true);
this.props.userSignInRequest(this.state).then(
  () => console.log('ok!'),
  (resp) =>  console.log(resp.errors); 
);

onSubmit(e)
e.preventDefault();
this.setState(errors: , isLoading: true);
this.props.userSignInRequest(this.state).then(
  () => console.log('ok!'),
  (errors) =>  console.log(errors); 
);

编辑:

this.props.userSignInRequest(this.state).then(() =>
    console.log('ok!')
).catch((resp) => 
    console.log(resp.response.data);
));

【讨论】:

作为对这个答案的补充,这里有一个关于 javascript 解构的链接 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 解构是当你在 javascript 对象周围放置大括号时发生的事情。 hm....我更改为(errors) => console.log(errors); ,再次显示未定义,但在 chrome 控制台中响应:` "errors":["无效的登录凭据。请重试。"]` 使用 userSignInRequest 函数更新您的问题。 api返回的http状态码是什么?? 状态码:401 未授权

以上是关于React.js - 在网站上授权时,如果数据不正确,我该如何获得文本错误的响应?的主要内容,如果未能解决你的问题,请参考以下文章

React Js循环遍历父数组以进行登录授权

React.js JWT Socket.io 身份验证

在 React.js 中的两个组件之间创建链接 [关闭]

擅自利用爬虫技术获取他人APP数据,构成不正当竞争

小白学React.js

Firebase react.js 应用部署 - 空白页面