‫So, up until this point in the course
‫we haven't really handled errors
‫in a good way or in a central place in our application.
‫What we did was to simply send back
‫an error message as JSON in each route handler
‫in case something went wrong.
‫Right?
‫So that's basically what we're gonna fix in this section.
‫But for now, let's take a minute
‫to just get a brief overview of error handling in Express.
‫And we start by actually distinguishing
‫between two types of errors that can occur.
‫Operational errors and programming errors.
‫So, operational errors are problems
‫that we can predict will inevitably happen
‫at some point in the future.
‫And so we just need to handle them in advance.
‫They have nothing to do with bugs in our code.
‫Instead, they depend on the user, or the system,
‫or the network.
‫So, things like a user accessing an invalid route,
‫inputting invalid data, or an application failing to connect
‫to the database.
‫All these are operational errors
‫that we will need to handle in order
‫to prepare our application for these cases.
‫You will also see the term, "exception"
‫being used instead of error
‫and while they are conceptually different,
‫many people use the terms error
‫and exception interchangeably.
‫And I'm just gonna call them, "errors,"
‫in this course as well in order to avoid confusion.
‫Anyway, on the other hand, we have programming errors.
‫Which are simply bugs that we developers
‫introduce into our code.
‫Like, for example, trying to read properties
‫from an undefined variable, using await without async,
‫accidentally using request.query instead of request.body,
‫or many other errors, really, that we might make.
‫So, you know how it works, right?
‫And they are really inevitable
‫but also more difficult to find and to handle.
‫Okay, so, it's important that you understand
‫this crucial difference between operational errors
‫and programming errors.
‫So, when we're talking about error handling with Express,
‫we mainly just mean operational errors.
‫Because these are the ones that are easy
‫to catch and to handle with our Express application.
‫And Express actually comes with error handling
‫out of the box.
‫So, all we have to do is to write
‫a global express error handling middleware
‫which will then catch errors coming
‫from all over the application.
‫So, no matter if it's an error coming from a route handler,
‫or a model validator or really, someplace else,
‫the goal is that all these errors end up
‫in one central error handling middleware.
‫So that we can send a nice response back to the client
‫letting them know what happened.
‫And so, really, handling in this case just means
‫sending a response letting the user know what happened.
‫But handling can also mean, in other cases,
‫retrying the operation or crashing the server,
‫or just ignoring the error altogether.
‫Sometimes, that's just the best option.
‫Now the beauty of having a global error handling middleware
‫is that it allows for a nice separation of concerns.
‫So, we don't have to worry about error handling
‫right in our business logic or our controllers,
‫or really anywhere in our application.
‫We can simply send the errors down to the error handler
‫which will then decide what to do with them next.
‫All right?
‫So, with all that being said,
‫let's now actually start implementing this.