Error Handling
This details how to handle errors in ambiorix.
When an error occurs server-side it should send the client a response with a status starting in 5 to indicates that was the case.
Default​
If you created your project using the ambiorix.generator or the ambiorix-cli, ambiorix defaults to using the following handler on error:
render_500 <- \(req, res, error) {
  res$status <- 500L
  res$send(
    "Internal server error"
  )
}
Otherwise, no error handler is put in place and you have to create one.
Global​
One can specify the handler to use when an error occurs anywhere in the application.
The error handler should be a function that takes 3 arguments: req, res and the error object.
A basic example:
app$error <- \(req, res, error){
  res$status(500L)
  res$send("There was a server error :(")
}
You have absolute full control in what you choose to do with the error object. In most cases, you will need to log errors.
Here is a more involved and realistic example:
error_handler <- \(req, res, error = NULL) {
  if (!is.null(error)) {
    error_msg <- conditionMessage(error)
    cli::cli_alert_danger("Error: {error_msg}")
  }
  response <- list(
    code = 500L,
    msg = "A server error occurred!"
  )
  res$
    set_status(500L)$
    json(response)
}
There are 2 ways you can use the handler:
- Via the set_error()method:The advantage of this is that you can chain other operations.Ambiorix$
 new()$
 set_error(error_handler)$
 ...
- The old way, via the errorfield:app <- Ambiorix$new()
 app$error <- error_handler
 ...
Route Specific​
Alternatively one can specify errors specific to certain routes, if these are not specified the global handler (above) is used.
app$get("/error", \(req, res){
  print(eRrOr)
}, \(req, res, error){
  res$send("This is an error on /error", status = 500L)
})