使用axios.get时,componentDidMount给出“请求失败,状态码为401”

时间:2020-05-28 06:43:38

标签: react-native mongoose axios

嗨,我是新来的响应native和node.js的人,我正在尝试从数据库(mongodb)中获取用户信息。当我在渲染器中使用axios.get时,它可以正常工作,但会出现内存错误。所以我使用componentDidMount,但是它给出了“请求失败,状态代码为401”的错误。

  async componentDidMount(): void {
    AsyncStorage.getItem('x-auth-token').then(x => this.setState({token: x}));
    setAuthToken(this.state.token);
    await axios.get('http://192.168.1.106:3333/api/auth/')
        .then(r => this.setUserInfo(r)).catch(err => console.log(err));
    await axios.get('http://192.168.1.106:3333/api/profile/me/')
        .then(r => this.setUserProfile(r)).catch(err => console.log(err));

}

setAuthToken:

const setAuthToken=token=>{
if(token){
    axios.defaults.headers.common['x-auth-token']=token;
}
else{
    delete axios.defaults.headers.common['x-auth-token'];
}

1 个答案:

答案 0 :(得分:0)

您的状态不会立即更新。它在渲染中起作用的原因是,在componentDidMount运行并且状态更新后,触发了重新渲染。你应该这样做

async componentDidMount(): void {
  const token = await AsyncStorage.getItem('x-auth-token');
  setAuthToken(token);
  await axios.get('http://192.168.1.106:3333/api/auth/')
    .then(r => this.setUserInfo(r)).catch(err => console.log(err));
  await axios.get('http://192.168.1.106:3333/api/profile/me/')
    .then(r => this.setUserProfile(r)).catch(err => console.log(err));
  this.setState({ token });
}

如果您仅在此处拨打电话,则无需设置状态。