1

I'm trying to display errors in a friendly way, but I'm always getting the errors stack trace with console logs that I want to get rid of.

The idea is to create a Lead in our platform using any source, for example, Google Sheets. When an invalid email is provided in the lead and posted to our API, I'm getting the expected message I want to display followed by the stack trace.

My custom error message is

INVALID FORMAT for email. Object didn't pass validation for format email: as1@mail.

But this is what I'm getting:

INVALID FORMAT for email. Object didn't pass validation for format email: as1@mail. What happened: Starting POST request to https://cosmo-charon-production.herokuapp.com/v1/lead/vehicle Received 500 code from https://cosmo-charon-production.herokuapp.com/v1/lead/vehicle?api-key=gIBp04HVdTgsHShJj6bXKwjbcxXTogsh after 62ms Received content "{"code":"SCHEMA_VALIDATION_FAILED","message":"Request validation failed: Parameter (lead) failed sch" INVALID FORMAT for email. Object didn't pass validation for format email: as1@mail. Console logs:

Image showing error displayed in Zapier


I've added a middleware for ErrorHandling into afterResponse, just as one of the examples provided in Zapier docs.

The function analyzeAndParse() receives an error object from the API and returns a string with the error message translated in a friendly way

const checkForErrors = (response, z) => {
  // If we get a bad status code, throw an error, using the ErrorTranslator
  if (response.status >= 300) {
    throw new Error(analyzeAndParse(response.json))
  }
  // If no errors just return original response
  return response
}

This is the code that creates a Lead in our platform, making a request to our API.

function createLead (z, bundle) {
  const industry = bundle.inputData.industry

  // add product to request based on the inputFields
  leadType[industry].addProductFields(bundle.inputData)

  const requestOptions = {
    url: `${baseUrl}lead/${_.kebabCase(industry)}`,
    method: 'POST',
    body: JSON.stringify(checkSourceForCreate(bundle.inputData)),
    headers: {
      'content-type': 'application/json'
    }
  }

  return z.request(requestOptions).then((response) => {
    if (response.status >= 300) {
      throw new Error(analyzeAndParse(response.content))
    }
    const content = JSON.parse(response.content)
    if (content && content.leads) {
      // get only the last lead from the list of leads
      content.lead = content.leads[0]
      delete content.leads
    }
    return content
  })
}

Any ideas?

Thanks!

Razneesh
  • 1,147
  • 3
  • 13
  • 29
  • 1
    I think there is nothing wrong, you are seeing raw request-response too because you are the app owner. Try to test this app in another Zapier account, in different zapier account you will see only an error – Kishor Patidar Feb 27 '20 at 11:43
  • @KishorPatidar Thanks a lot ! That was the problem! – Luciano Paci Feb 27 '20 at 13:47

0 Answers0