googlemaps / google-maps-services-js

Node.js client library for Google Maps API Web Services
Apache License 2.0
2.86k stars 631 forks source link

Issue getting an unambiguous error message from Node.js Client for Google Maps Services #952

Open CyrilKamal opened 1 year ago

CyrilKamal commented 1 year ago

Environment details

  1. Using the Directions API
  2. Windows 11 Version 22H2
  3. @googlemaps/google-maps-services-js@3.3.27

Steps to reproduce

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,
      optimize: true,
      mode: '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 I think there is a bug in 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 returns undefined and has no further properties like an error_message prop.

Stack trace

console.log('Directions request failed due to ' + e.data.error_message);
                                                             ^

TypeError: Cannot read properties of undefined (reading 'error_message')
wangela commented 1 year ago

If you would like to upvote the priority of this issue, please comment below or react with :+1: so we can see what is popular when we triage.

@CyrilKamal Thank you for opening this issue. 🙏 Please check out these other resources that might help you get to a resolution in the meantime:

This is an automated message, feel free to ignore.

CyrilKamal commented 1 year ago

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);
    });

I just wanted to put this here if it happens to help you guys with debugging :)