'fetching in express js with axios returns [Object object]

I have another api that lets say returns this given a query name using a get request

https://another_api.com/?name=${name}

for example

>>> https://another_api.com/?name=bob
{
    friends: [10]
}
>>> https://another_api.com/?name=sam
{
    friends: [4]
}

I'm now using express to create another API that fetches on that API but it can take more than one friend as input. e.g. https:/localhost:5000/api?names=bob,sam, this would output total friends being 14

app.get("/api", async (req, res) => {
    const names = req.query.names;


    const names_array = names.split(",");
    

    let total_friends = [];
    let total = 0
    for (const name of names_array) {
        const response = await axios.get(`https://another_api.com/?name=${name}`);
        const friends = response.data.friends[0];
        total += friends
    }
    total_friends.push(total)
    res.send({ "friends": total_friends });
}

it returns

{
    friends:[Object Object] 
}

instead?



Solution 1:[1]

first, if you just need number of friends, then simply return the total, why are you pushing it again to total_friends... total already does the job

second thing I would suggest while looping and performing async operation is to promisify the entire for loop first, you can do this using http://bluebirdjs.com/docs/api/promise.each.html

Solution 2:[2]

Your problem is that you are using res.send(...). I think what you are actually wanting is res.json(...).

res.send(...) just uses the toString method of the object you are putting in to it. res.json(...) will convert your object to JSON.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Saksham Khurana
Solution 2 jkoch