Edge Functions

Error Handling

Implement proper error responses and client-side handling to create reliable applications.


Error handling

Implementing the right error responses and client-side handling helps with debugging and makes your functions much easier to maintain in production.

Within your Edge Functions, return proper HTTP status codes and error messages:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Deno.serve(async (req) => { try { // Your function logic here const result = await processRequest(req) return new Response(JSON.stringify(result), { headers: { 'Content-Type': 'application/json' }, status: 200, }) } catch (error) { console.error('Function error:', error) return new Response(JSON.stringify({ error: error.message }), { headers: { 'Content-Type': 'application/json' }, status: 500, }) }})

Best practices for function errors:

  • Use the right HTTP status code for each situation. Return 400 for bad user input, 404 when something doesn't exist, 500 for server errors, etc. This helps with debugging and lets client apps handle different error types appropriately.
  • Include helpful error messages in the response body
  • Log errors to the console for debugging (visible in the Logs tab)

Client-side error handling

Within your client-side code, an Edge Function can throw three types of errors:

  • FunctionsHttpError: Your function executed but returned an error (4xx/5xx status)
  • FunctionsRelayError: Network issue between client and Supabase
  • FunctionsFetchError: Function couldn't be reached at all
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import { FunctionsHttpError, FunctionsRelayError, FunctionsFetchError } from '@supabase/supabase-js'const { data, error } = await supabase.functions.invoke('hello', { headers: { 'my-custom-header': 'my-custom-header-value' }, body: { foo: 'bar' },})if (error instanceof FunctionsHttpError) { const errorMessage = await error.context.json() console.log('Function returned an error', errorMessage)} else if (error instanceof FunctionsRelayError) { console.log('Relay error:', error.message)} else if (error instanceof FunctionsFetchError) { console.log('Fetch error:', error.message)}

Make sure to handle the errors properly. Functions that fail silently are hard to debug, functions with clear error messages get fixed fast.


Error monitoring

You can see the production error logs in the Logs tab of your Supabase Dashboard.

Function invocations.

For more information on Logging, check out this guide.