简体   繁体   English

如何在重构 function 的同时提取 axios post 请求逻辑?

[英]How to extract axios post request logic while refactoring a function?

I am trying to implement a login functionality where I pass the emailId and password and receive the logged-in user data from the server.我正在尝试实现一个登录功能,我在其中传递emailIdpassword并从服务器接收登录用户数据。 Also if some error occurs it is handled accordingly.此外,如果发生某些错误,也会相应地进行处理。

Here is the code:这是代码:

export const handleLogin = async (e, navigate, link, data, setError) => {
    try {

        const cancelToken = axios.CancelToken.source();
        const response = await axios.post(link, { ...data }, { cancelToken: cancelToken.token });  //this is the axios post request part
        localStorage.setItem("token", response.data.token);
        axios.defaults.headers.common["Authorization"] = response.data.token;
        navigate("/");

    } catch (err) {

        if (axios.isAxiosError(err)) {
            handleAuthenticationError(setError, err.response?.data, navigate);
        }
    
    }
};

In my refactored version, I am trying to make the Axios post request part a different function.在我的重构版本中,我试图将 Axios post 请求部分设为不同的 function。

Here is my refactored version:这是我的重构版本:

export const handlePostApi = async (e,navigate, link, data, setError) => {
    try {
        const cancelToken = axios.CancelToken.source();
        const response = await axios.post(link, { ...data }, { cancelToken: cancelToken.token });
        return response.data;
    } catch (err) {
        
        if (axios.isAxiosError(err)) {
            handleAuthenticationError(setError, err.response?.data, navigate);
        }
    }
};


export const handleLogin = async (e, navigate, link, data, setError) => {
        const userData = handlePostApi(e,navigate, link, data, setError);
        localStorage.setItem("token", userData.token);
        axios.defaults.headers.common["Authorization"] = userData.token;
        navigate("/");
};

Now login-specific logic and post-request-specific logic are separated.现在,特定于登录的逻辑和特定于后请求的逻辑是分开的。 But in the case of the handlePostApi function for Axios success, I am returning response.data but I am unable to understand in case of error what should be returned.但是在handlePostApi function for Axios 成功的情况下,我返回response.data但我无法理解在出现error时应该返回什么。

Please guide me.请指导我。

You can handle the error in the calling method.您可以在调用方法中处理错误。
Also, you should probably move all the logic in the separate method and don't keep it in separate functions:此外,您可能应该将所有逻辑移动到单独的方法中,不要将其保留在单独的函数中:

export const handlePostApi = async (link, data) => {
  const cancelToken = axios.CancelToken.source();
  const response = await axios.post(
    link,
    { ...data },
    { cancelToken: cancelToken.token }
  );
  const userData = response.data;
  localStorage.setItem('token', userData.token);
  axios.defaults.headers.common['Authorization'] = userData.token;
};

export const handleLogin = async (e, navigate, link, data, setError) => {
  try {
    await handlePostApi(link, data);
    navigate('/');
  } catch (err) {
    if (axios.isAxiosError(err)) {
      handleAuthenticationError(setError, err.response?.data, navigate);
    }
  }
};

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM