Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated:
1
00:00:01,220 --> 00:00:02,890
Let's now handle the error
2
00:00:02,890 --> 00:00:06,140
that occurs when we try to create duplicate fields
3
00:00:06,140 --> 00:00:09,633
for fields that are actually supposed to be unique.
4
00:00:11,110 --> 00:00:12,210
And so, remember,
5
00:00:12,210 --> 00:00:13,940
that this is the type of error
6
00:00:13,940 --> 00:00:14,900
that we get.
7
00:00:14,900 --> 00:00:16,673
So, we tried to create a new tour
8
00:00:16,673 --> 00:00:19,000
with a name that already exists
9
00:00:19,000 --> 00:00:21,550
and the name fields is supposed to be unique
10
00:00:21,550 --> 00:00:23,670
and so we get this error.
11
00:00:23,670 --> 00:00:25,250
Now this error here doesn't have
12
00:00:25,250 --> 00:00:27,210
a name property, okay?
13
00:00:27,210 --> 00:00:29,071
And that's because, as I mentioned before,
14
00:00:29,071 --> 00:00:30,910
it is actually not an error
15
00:00:30,910 --> 00:00:32,720
that is caused by a Mongoose.
16
00:00:32,720 --> 00:00:35,000
But instead, really, by the underlying
17
00:00:35,000 --> 00:00:37,830
MongoDB driver, okay?
18
00:00:37,830 --> 00:00:39,140
And so, what we're gonna do
19
00:00:39,140 --> 00:00:40,734
to identify this error
20
00:00:40,734 --> 00:00:45,580
is use this 11,000 code here.
21
00:00:45,580 --> 00:00:46,413
All right?
22
00:00:47,970 --> 00:00:51,263
So, we have one handler for the CastError.
23
00:00:51,263 --> 00:00:54,190
Let's now create one for the case
24
00:00:54,190 --> 00:00:55,823
that we have that error.code,
25
00:00:56,837 --> 00:01:00,673
.code equal to 11,000.
26
00:01:01,640 --> 00:01:04,138
So in that case, all error should be equal
27
00:01:04,138 --> 00:01:08,833
to the error returns from handleDuplicateFields
28
00:01:10,610 --> 00:01:12,610
and again, I'm adding DB here
29
00:01:12,610 --> 00:01:15,983
just so we know that this has to do with our database.
30
00:01:16,940 --> 00:01:18,160
All right?
31
00:01:18,160 --> 00:01:22,383
And, so let's now actually then create this function.
32
00:01:29,470 --> 00:01:32,900
And now, the message that we're gonna send
33
00:01:34,900 --> 00:01:37,470
is this one so let's create it here.
34
00:01:37,470 --> 00:01:38,993
And so I want it to say,
35
00:01:43,220 --> 00:01:46,090
Duplicate field value, and then hear the name
36
00:01:46,090 --> 00:01:49,503
of that value, so let's put that to x for now.
37
00:01:50,760 --> 00:01:53,160
We will generate that a bit later.
38
00:01:53,160 --> 00:01:57,113
So please use another value.
39
00:01:58,170 --> 00:01:59,030
All right?
40
00:01:59,030 --> 00:02:01,120
And so in the case that we just saw,
41
00:02:01,120 --> 00:02:04,093
this x here should be called the Forest Hiker.
42
00:02:05,730 --> 00:02:07,410
So basically, what we're trying to get
43
00:02:07,410 --> 00:02:11,090
out of this error message string here
44
00:02:11,090 --> 00:02:13,577
is this, "The Forest Hiker."
45
00:02:14,569 --> 00:02:16,280
So that is the duplicate value
46
00:02:16,280 --> 00:02:18,040
that we want to send to the client
47
00:02:18,040 --> 00:02:20,100
so that they can now correct it
48
00:02:20,100 --> 00:02:22,040
and create another name.
49
00:02:22,040 --> 00:02:23,595
So, how can we actually extract
50
00:02:23,595 --> 00:02:26,120
this piece of the string here?
51
00:02:26,120 --> 00:02:28,520
Well, we're gonna use a regular expression
52
00:02:28,520 --> 00:02:30,640
to, basically, as I just said,
53
00:02:30,640 --> 00:02:33,170
find the text that is between quotes.
54
00:02:33,170 --> 00:02:35,520
'Cause here in this string, all we have really
55
00:02:35,520 --> 00:02:37,670
to identify this text here,
56
00:02:37,670 --> 00:02:40,460
so to find it, is these quotes.
57
00:02:40,460 --> 00:02:41,293
All right?
58
00:02:41,293 --> 00:02:43,010
And now, as you already know,
59
00:02:43,010 --> 00:02:45,670
regular expressions can be really tough.
60
00:02:45,670 --> 00:02:47,840
And so I usually just Google them
61
00:02:47,840 --> 00:02:50,273
and so let me show you how I actually do that.
62
00:02:53,280 --> 00:02:55,250
In this case, I would simply search
63
00:02:55,250 --> 00:03:00,250
for regular expression match text between quotes.
64
00:03:05,620 --> 00:03:08,660
And then usually it's right the first result.
65
00:03:08,660 --> 00:03:11,250
And then down here we have the result
66
00:03:11,250 --> 00:03:14,698
and so we can use simply this regular expression.
67
00:03:14,698 --> 00:03:17,150
Now I see that we have down here this here.
68
00:03:17,150 --> 00:03:19,270
This also works and it's easier to read.
69
00:03:19,270 --> 00:03:21,100
And it has a bunch of up votes
70
00:03:21,100 --> 00:03:23,280
and so we simply can use this one.
71
00:03:23,280 --> 00:03:25,290
So that should work as well.
72
00:03:25,290 --> 00:03:29,870
So let's copy it and let's go back to our code,
73
00:03:29,870 --> 00:03:32,493
and say that our value,
74
00:03:34,440 --> 00:03:37,663
so const value is equal to the error.ermsg,
75
00:03:40,990 --> 00:03:45,990
so remember, that that was the name of the property.
76
00:03:46,000 --> 00:03:48,820
So, errmsg. So again, that's because
77
00:03:48,820 --> 00:03:51,010
this is an error created by Mongo
78
00:03:51,010 --> 00:03:53,383
and so these is slightly different names.
79
00:03:54,410 --> 00:03:55,243
Okay?
80
00:03:55,243 --> 00:03:57,890
So we have this string and now here we want to match
81
00:03:57,890 --> 00:03:59,973
our regular expression.
82
00:04:02,140 --> 00:04:04,260
So, match, and then in JavaScript,
83
00:04:04,260 --> 00:04:07,623
a regular expression is always between two slashes.
84
00:04:08,530 --> 00:04:12,220
Then paste it here what we just got from Stack Overflow
85
00:04:14,450 --> 00:04:16,000
and let's actually take a look.
86
00:04:22,260 --> 00:04:24,600
So, we're running already in production.
87
00:04:24,600 --> 00:04:27,340
Right now we will not send back any response.
88
00:04:27,340 --> 00:04:30,203
All I want to do now is to take a look at the value.
89
00:04:31,870 --> 00:04:36,870
So, if I sent this now we get this weird response here.
90
00:04:37,870 --> 00:04:40,910
And again, that's because we're not sending any error.
91
00:04:40,910 --> 00:04:44,213
But for now I was really just interested in the value.
92
00:04:45,540 --> 00:04:46,660
And so this, what we see here
93
00:04:46,660 --> 00:04:48,980
in the log now is that value.
94
00:04:48,980 --> 00:04:51,163
And actually it is an array.
95
00:04:52,030 --> 00:04:55,830
But what we're interested in is actually this string here.
96
00:04:55,830 --> 00:04:58,550
So it did actually match all the text
97
00:04:58,550 --> 00:05:00,670
that was between strings and so,
98
00:05:00,670 --> 00:05:01,970
we can say that it worked.
99
00:05:03,680 --> 00:05:06,720
So our regular expression worked.
100
00:05:06,720 --> 00:05:08,370
Now, all we have to say is that we want
101
00:05:08,370 --> 00:05:10,970
the first element of that array.
102
00:05:10,970 --> 00:05:12,960
So, element zero.
103
00:05:12,960 --> 00:05:16,280
And now, let's actually go ahead and return
104
00:05:16,280 --> 00:05:20,590
or new AppError, so new AppError,
105
00:05:20,590 --> 00:05:22,560
paste in the message,
106
00:05:22,560 --> 00:05:25,993
and again the 400 status code for a bad request.
107
00:05:27,999 --> 00:05:29,570
And so let's now try that again.
108
00:05:29,570 --> 00:05:31,820
Again, we are still running a production
109
00:05:31,820 --> 00:05:34,550
and so that code should now run.
110
00:05:34,550 --> 00:05:37,423
And of course, we tried to replace our x.
111
00:05:40,400 --> 00:05:42,613
Of course, we now want our value here.
112
00:05:46,750 --> 00:05:49,327
And so, now we get duplicate field value,
113
00:05:49,327 --> 00:05:51,110
"The Forest Hiker."
114
00:05:51,110 --> 00:05:51,970
Perfect.
115
00:05:51,970 --> 00:05:54,140
And now, next up, in the next video
116
00:05:54,140 --> 00:05:57,330
we will then handle the last of the three errors
117
00:05:57,330 --> 00:05:59,083
which are the validation errors.
8639
Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.