微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 axios多个文件处理 API 错误响应

如何解决使用 axios多个文件处理 API 错误响应

我是 React 的新手,我试图将我的 Axios http 实用程序分离到不同的文件中。

如果我使用正确的凭据登录它工作正常,但是当我尝试错误的凭据并且我的 API 响应带有 401(错误凭据)消息时,Axios 执行 then() 方法而不是 catch() 方法

axios.ts

import Axios from "axios";

const JSON_CONTENT_TYPE = "application/json";

// axios configuration
const axios = Axios.create({
  baseURL: process.env.REACT_APP_API_URL,responseType: "json"
});

// ... other requests handlers

export const post = <T = any>(
  url: string,body: any,params?: any,contentType = JSON_CONTENT_TYPE
) => {
  return axios.post<T>(url,body,{
    params,headers: { "Content-Type": contentType }
  });
};

登录适配器.ts

import { ILogin } from "../../model/login.model";
import * as Http from "../axios";
import * as StorageManager from "../storage-manager";

type TokenBody = {
  id_token: string;
};

export const login = (credentials: ILogin) => {
  return new Promise((resolve,reject) => {
    Http.post<TokenBody>("/authenticate",credentials)
      .then((resp) => {
        // Stores jwt in local/session storage.
        // HERE IS WHEN MY APP CRASHES,The error says 'resp is undefined' and THIS ERROR (not the response from my API) is caught by the catch method below.
        StorageManager.setToken(resp.data.id_token,credentials.rememberMe);
        // Does another request to get user info.
        Http.get("/account").then(console.log);
        resolve("Success");
      })
      .catch((error) => reject("Error," + error.response.data)); // THIS SHOULD SEND THE ERROR MESSAGE TO LoginPage.tsx
  });
};

LoginPage.tsx

import { FormEvent,useState } from "react";
import "../../styles/LoginPage.css";
import * as LoginAdapter from "../../adapters/loginAdapters/login-adapter";
import { RouteComponentProps } from "react-router-dom";

const LoginPage = ({history}: RouteComponentProps) = {
  const [email,setEmail] = useState("");
  const [password,setPassword] = useState("");
  const [rememberMe,setRememberMe] = useState(false);

  const submit = (e: FormEvent<HTMLFormElement>) => {
    LoginAdapter.login({ email,password,rememberMe })
      .then(() => {
        history.push("/admin/courses");
      })
      .catch((error) => {
        console.log(error);
      });
    e.preventDefault();
  }
  
  return (
    <form onSubmit={submit}>
      {/* <input ... email,and 'remember me' form fields.*/}
    </form>
  );
}

export default LoginPage;

当我直接从包中使用 axios 时。 (import axios from "axios") 它完美地工作。但是我必须重写我的api端点,响应类型,拦截器等。我不知道为什么它不起作用,我错过了什么吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?