node.jsgoogle-maps-api-3google-directions-api

How to resolve getting an unambiguous error message from Node.js Client for Google Maps Services


I am trying to use the Google Maps Directions API in my Node.js application to get optimized routes between multiple waypoints. I haven't been able to make successful requests and receive responses using the API, and the problem is I can't debug the problem because I am getting an error that I can't get to be specific.

my client object looks like this:

client
  .directions({
    params: {
      origin: origin, //{placeId:"ChIJdd4hrwug2EcRmSrV3Vo6llI"},
      destination: destination, //{placeId: "ChIJh1a5WhEMa0gRY1JU4PEam8Q"},
      waypoints: waypts,
      optimizeWaypoints: true,
      travelMode: 'DRIVING',
      key: process.env.GOOGLE_MAPS_API_KEY
    },
    timeout: 1000, // milliseconds
  })
  .then((r) => {
    console.log("got r")
    const routeOrder = r.data.routes[0].waypoint_order;
    for(let i = 0; i < reqList.length; i++){
      reqList[i] = reqList[i].replaceAll(' ', '+');
    }
    const n = reqList.length
    reorder(reqList, routeOrder, n)
    console.log(reqList)
  })
  .catch((e) => {
    console.log('Directions request failed due to ' + e);
  });


});

and origin, destination and waypts looks like this

"50 Madeleine St, Kitchener, ON N2R 1V4, Canada"
"Lola, 4th Avenue, Seattle, WA, USA"
[
  { location: '"New York, NY, USA"', stopover: true },
  { location: '"Vancouver, BC"', stopover: true },
  { location: '"Port Angeles, WA, USA"', stopover: true }
]

I've shown my whole client object with the try-catch; I suspect I don't know how to properly catch the Error because what I get is (Directions request failed due to Error).

At the GitHub for the NodeJS client for Maps API: https://github.com/googlemaps/google-maps-services-js/blob/master/README.md You can see in the quick start they want to log the error message like this e.response.data.error_message but when I try to do it that way I get console.log('Directions request failed due to ' + e.response.data.error_message);TypeError: Cannot read properties of undefined (reading 'data')

So Im not sure how to get an actual helpful error code. I also tried looking into the props of the error object and went down e.config.data as that seemed the closest but e.config.data just returns undefined and has not further properties like an error_message prop.


Solution

  • Kind of a workaround, but if you go to the deprecated google maps node client located here, it works perfectly fine and returns an actual error code. Here is the working code with the deprecated client

    googleMapsClient.directions({origin: origin, destination: destination, waypoints:waypts, optimize:true, mode: "driving"})
        .asPromise()
        .then((response) => {
        console.log(response)
        const routeOrder = response.json.routes[0].waypoint_order;
        for(let i = 0; i < reqList.length; i++){
          reqList[i] = reqList[i].replaceAll(' ', '+');
        }
        const n = reqList.length
        reorder(reqList, routeOrder, n)
        console.log(reqList)
        })
        .catch((err) => {
        console.log(err.json.status);
        });
    

    (ps. the origin/distance/waypoints seem to be very forgiving with how you send them, like having '+' instead of space and having points in quotation marks/without)