Home > OS >  GET request with axios (using await) returning undefined
GET request with axios (using await) returning undefined

Time:08-25

I'm using axios to get data and then handle 401 error and so far it works, but there is a problem when I try to import my axios function and use it I got undefiend but not the actual response. Btw I have seen simillar questions and didn't find answear.

axios function code

import axios from 'axios';

const stateFetch = async (user, id) => { 
  console.log("in function stateFetch");
  axios.defaults.headers.common = {'Authorization': `bearer ${user.json.token}`}
  await axios.get(`/api/name/blogs/${id}/validate`);
}

axios.interceptors.response.use(response => {
  console.log(response);
  return response;
}, error => {
  console.log(error.response);
if (error.response.status === 401) {
   return "user is not authorized to edit this blog";
}
return error;
});

export default stateFetch;

the fetching part

const fetchState = async () => {
            //chek if client is authenticated to edit the blog
            console.log("fetchState");
            try {
                const response = await stateFetch(user, id);
                console.log(response);
                if (!response.ok) {
                    throw Error(response);
                }
                setState(response);
            } catch (error) {
                console.log(error);
                if (error.message === "user is not authorized to edit this blog")
                {
                    console.log("user is not authorized to edit this blog");
                    setState({state: "false"});
                    return;
                }
                setError(error);
            }
        }

what I get on console picker of console log sory for picture

CodePudding user response:

As you do not have explicit return from async function, stateFetch returns undefined

const stateFetch = async (user, id) => { 
  console.log("in function stateFetch");
  axios.defaults.headers.common = {'Authorization': `bearer ${user.json.token}`}
  await axios.get(`/api/name/blogs/${id}/validate`);
  // return undefined
}

just add return

const stateFetch = async (user, id) => { 
  console.log("in function stateFetch");
  axios.defaults.headers.common = {'Authorization': `bearer ${user.json.token}`}
  return await axios.get(`/api/name/blogs/${id}/validate`);
}

CodePudding user response:

You should return the response from stateFetch function. Just add the return keyword as here

const stateFetch = async (user, id) => { 
  console.log("in function stateFetch");
  axios.defaults.headers.common = {'Authorization': `bearer ${user.json.token}`}
  return await axios.get(`/api/name/blogs/${id}/validate`);
}

CodePudding user response:

Remeber to add the domain name/ip For example:

const stateFetch = async (user, id) => { 
  console.log("in function stateFetch");
  axios.defaults.headers.common = {'Authorization': `bearer ${user.json.token}`}
  

return await axios.get(http://localhost:3000/api/name/blogs/${id}/validate); }

  • Related