Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated:
1
00:00:01,320 --> 00:00:03,670
So, up until this point in the course
2
00:00:03,670 --> 00:00:05,430
we haven't really handled errors
3
00:00:05,430 --> 00:00:09,420
in a good way or in a central place in our application.
4
00:00:09,420 --> 00:00:11,690
What we did was to simply send back
5
00:00:11,690 --> 00:00:15,180
an error message as JSON in each route handler
6
00:00:15,180 --> 00:00:16,750
in case something went wrong.
7
00:00:16,750 --> 00:00:17,760
Right?
8
00:00:17,760 --> 00:00:21,250
So that's basically what we're gonna fix in this section.
9
00:00:21,250 --> 00:00:22,860
But for now, let's take a minute
10
00:00:22,860 --> 00:00:26,653
to just get a brief overview of error handling in Express.
11
00:00:27,490 --> 00:00:29,700
And we start by actually distinguishing
12
00:00:29,700 --> 00:00:32,549
between two types of errors that can occur.
13
00:00:32,549 --> 00:00:35,660
Operational errors and programming errors.
14
00:00:35,660 --> 00:00:38,060
So, operational errors are problems
15
00:00:38,060 --> 00:00:40,760
that we can predict will inevitably happen
16
00:00:40,760 --> 00:00:42,480
at some point in the future.
17
00:00:42,480 --> 00:00:45,500
And so we just need to handle them in advance.
18
00:00:45,500 --> 00:00:48,430
They have nothing to do with bugs in our code.
19
00:00:48,430 --> 00:00:51,760
Instead, they depend on the user, or the system,
20
00:00:51,760 --> 00:00:53,050
or the network.
21
00:00:53,050 --> 00:00:57,320
So, things like a user accessing an invalid route,
22
00:00:57,320 --> 00:01:01,430
inputting invalid data, or an application failing to connect
23
00:01:01,430 --> 00:01:02,870
to the database.
24
00:01:02,870 --> 00:01:05,290
All these are operational errors
25
00:01:05,290 --> 00:01:06,920
that we will need to handle in order
26
00:01:06,920 --> 00:01:10,440
to prepare our application for these cases.
27
00:01:10,440 --> 00:01:12,590
You will also see the term, "exception"
28
00:01:12,590 --> 00:01:14,680
being used instead of error
29
00:01:14,680 --> 00:01:17,200
and while they are conceptually different,
30
00:01:17,200 --> 00:01:19,290
many people use the terms error
31
00:01:19,290 --> 00:01:21,670
and exception interchangeably.
32
00:01:21,670 --> 00:01:23,370
And I'm just gonna call them, "errors,"
33
00:01:23,370 --> 00:01:26,860
in this course as well in order to avoid confusion.
34
00:01:26,860 --> 00:01:30,460
Anyway, on the other hand, we have programming errors.
35
00:01:30,460 --> 00:01:32,800
Which are simply bugs that we developers
36
00:01:32,800 --> 00:01:34,810
introduce into our code.
37
00:01:34,810 --> 00:01:37,010
Like, for example, trying to read properties
38
00:01:37,010 --> 00:01:41,220
from an undefined variable, using await without async,
39
00:01:41,220 --> 00:01:46,070
accidentally using request.query instead of request.body,
40
00:01:46,070 --> 00:01:49,020
or many other errors, really, that we might make.
41
00:01:49,020 --> 00:01:51,530
So, you know how it works, right?
42
00:01:51,530 --> 00:01:53,540
And they are really inevitable
43
00:01:53,540 --> 00:01:56,810
but also more difficult to find and to handle.
44
00:01:56,810 --> 00:01:59,720
Okay, so, it's important that you understand
45
00:01:59,720 --> 00:02:02,480
this crucial difference between operational errors
46
00:02:02,480 --> 00:02:04,230
and programming errors.
47
00:02:04,230 --> 00:02:07,330
So, when we're talking about error handling with Express,
48
00:02:07,330 --> 00:02:09,930
we mainly just mean operational errors.
49
00:02:09,930 --> 00:02:11,890
Because these are the ones that are easy
50
00:02:11,890 --> 00:02:15,650
to catch and to handle with our Express application.
51
00:02:15,650 --> 00:02:18,070
And Express actually comes with error handling
52
00:02:18,070 --> 00:02:19,390
out of the box.
53
00:02:19,390 --> 00:02:21,160
So, all we have to do is to write
54
00:02:21,160 --> 00:02:24,010
a global express error handling middleware
55
00:02:24,010 --> 00:02:26,090
which will then catch errors coming
56
00:02:26,090 --> 00:02:28,050
from all over the application.
57
00:02:28,050 --> 00:02:31,260
So, no matter if it's an error coming from a route handler,
58
00:02:31,260 --> 00:02:34,950
or a model validator or really, someplace else,
59
00:02:34,950 --> 00:02:37,240
the goal is that all these errors end up
60
00:02:37,240 --> 00:02:39,920
in one central error handling middleware.
61
00:02:39,920 --> 00:02:43,610
So that we can send a nice response back to the client
62
00:02:43,610 --> 00:02:45,510
letting them know what happened.
63
00:02:45,510 --> 00:02:48,340
And so, really, handling in this case just means
64
00:02:48,340 --> 00:02:52,040
sending a response letting the user know what happened.
65
00:02:52,040 --> 00:02:55,050
But handling can also mean, in other cases,
66
00:02:55,050 --> 00:02:58,220
retrying the operation or crashing the server,
67
00:02:58,220 --> 00:03:00,960
or just ignoring the error altogether.
68
00:03:00,960 --> 00:03:03,980
Sometimes, that's just the best option.
69
00:03:03,980 --> 00:03:07,470
Now the beauty of having a global error handling middleware
70
00:03:07,470 --> 00:03:10,830
is that it allows for a nice separation of concerns.
71
00:03:10,830 --> 00:03:13,170
So, we don't have to worry about error handling
72
00:03:13,170 --> 00:03:16,220
right in our business logic or our controllers,
73
00:03:16,220 --> 00:03:18,750
or really anywhere in our application.
74
00:03:18,750 --> 00:03:22,090
We can simply send the errors down to the error handler
75
00:03:22,090 --> 00:03:25,090
which will then decide what to do with them next.
76
00:03:25,090 --> 00:03:26,340
All right?
77
00:03:26,340 --> 00:03:28,170
So, with all that being said,
78
00:03:28,170 --> 00:03:30,463
let's now actually start implementing this.
6208
Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.