簡體   English   中英

無法從 React Native 中的 Axios 響應中獲取錯誤消息

[英]Can't Get Error Message From Axios Response in React Native

我正在使用 React Native 編寫移動應用程序。 在某些情況下,我需要發送一個發布請求並獲得包括錯誤部分的響應。 因此,對於某些特定輸入,API(我自己的)返回 409 和一條消息。 示例返回:

{
    "status": 409,
    "message": "E-mail is already exists!"
}

在這里,我想接收該消息並向用戶展示。 這是我嘗試過的:

UserService.signup({ fullName, email, username, password })
  .then(response => {
    this.setState({ signUp: true });
    if (response.result) {
      Toast.show(messages.successfulSignUp, {
        backgroundColor: "green",
        duration: Toast.durations.LONG,
        position: Toast.positions.TOP
      });
      this.props.navigation.navigate("SignIn");
    } else {
    }
  })
  .catch(error => {
    Toast.show(error.message, {
      backgroundColor: "red",
      duration: Toast.durations.LONG,
      position: Toast.positions.TOP
    });
    this.setState({ signUp: false });
  });

我嘗試error.message, error.response, error, error.data鍵,但它總是說TypeError: undefined is not an object (evaluating 'error.message') 那么,如何從錯誤 object 中獲取消息?


編輯:這就是我發送請求的方式:

import { post } from "./api";

export default {
  signup: ({ fullName, email, username, password }) => {
    return post("/user/register", { fullName, email, username, password });
  }
};

export const request = config => {
  return new Promise((resolve, reject) => {
    axiosInstance
      .request({
        url: config.url,
        method: config.method || "get",
        data: config.body,
        headers: {
          "Content-Type": "application/json",
          "X-Auth-Token": store.getState().auth.token
        }
      })
      .then(response => {
        resolve(response.data);
      })
      .catch(error => {
        reject(error.data);
      });
  });
};

export const post = (url, body = {}) => {
  return request({
    url,
    body,
    method: "post"
  });
};

最后我解決了這個問題。 我不得不改變我的請求方法和我解決錯誤的方式:

export const request = (config) => {
    return new Promise((resolve, reject) => {
        axiosInstance.request({
            url: config.url,
            method: config.method || 'get',
            data: config.body,
            headers: {
                'Content-Type': 'application/json',
                'X-Auth-Token': store.getState().auth.token,
            }
        }).then(response => {
            resolve(response.data)
        }).catch(error => {
            reject(error.response)
        })
    })
}

// This is how reach out to the error message:
console.log(error.data.message);

根據后端返回的內容,axios 中的錯誤消息位於錯誤 object 的response.data中。

.catch(error => {

    const errResponse = (error && error.response && error.response.data) 
     || (error && error.message); 

    reject(errResponse);
});

Axios 已經返回 Promise

您的請求 function 應該是這樣的,

export const request = config => {
  return axiosInstance.request({
        url: config.url,
        method: config.method || "get",
        data: config.body,
        headers: {
          "Content-Type": "application/json",
          "X-Auth-Token": store.getState().auth.token
        }
  });
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM