快递发送json但客户端收到未定义的

时间:2017-07-13 16:13:26

标签: javascript json reactjs express promise

我遇到了一个非常令人沮丧的问题。如果快速服务器上的简单json常量作为json对象发送,但是当接收到该对象并尝试从客户端上从中提取错误时,来自服务器的json对象将以undefined形式出现,并且我的生活,我无法弄清楚为什么。

似乎从服务器更改res.status(400).json(errors);res.json(errors);并从客户端代码块中提取错误数据,其中isValid 为true,我能够得到错误消息 - 因此,发送400状态可能与它有关。

有没有其他人参与此问题?我很欣赏有关如何解决的任何建议。

Express - api.js

 if( isValid ) {
      res.json({success: true});
 } else {
      const errors = { username: 'This field is required',
                       email: 'Email is invalid' };

     res.status(400).json(errors);
 }

SignupForm组件

    this.setState({errors: {}, isLoading: true});
    this.props.userSignupRequest(this.state).then(
                    () => {
                        this.props.history.push('/');
                    },
                    ({data}) => {
                        console.log(data); //undefined
                        this.setState({errors: data, isLoading: false})
                    }
                )

SignupAction.js

import axios from 'axios';

export function userSignupRequest(userData) {
    return dispatch => {
        return axios.post('http://myhost/api/signup', userData);
    }
}

1 个答案:

答案 0 :(得分:1)

根据Axios manual

  

使用catch或传递rejection callback作为then的第二个参数时,响应将通过error对象提供,如Handling Errors中所述}。section。

所以:

this.props.userSignupRequest(this.state).then(
                () => {
                    this.props.history.push('/');
                },
                error => {
                  const {data} = error.response;
                  console.log(data);
                  this.setState({errors: data, isLoading: false});
                }
            )