Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated:
1
00:00:01,060 --> 00:00:03,440
So, Mongoose offers us developers
2
00:00:03,440 --> 00:00:05,823
very powerful ways of validating data
3
00:00:05,823 --> 00:00:08,280
that's coming into our model.
4
00:00:08,280 --> 00:00:10,430
And so, in this video you're gonna learn
5
00:00:10,430 --> 00:00:13,093
all about data validation with Mongoose.
6
00:00:14,870 --> 00:00:18,110
Now, what exactly does validation actually mean?
7
00:00:18,110 --> 00:00:21,470
Well, validation is basically checking if the entered
8
00:00:21,470 --> 00:00:24,270
values are in the right format for each field
9
00:00:24,270 --> 00:00:27,430
in our document schema, and also that values
10
00:00:27,430 --> 00:00:30,860
have actually been entered for all of the required fields.
11
00:00:30,860 --> 00:00:33,940
Now, on the other hand, we also have sanitization,
12
00:00:33,940 --> 00:00:37,240
which is to ensure that the inputted data is
13
00:00:37,240 --> 00:00:40,250
basically clean, so that there is no malicious code
14
00:00:40,250 --> 00:00:42,240
being injected into our database,
15
00:00:42,240 --> 00:00:44,330
or into the application itself.
16
00:00:44,330 --> 00:00:47,470
So, in that step we remove unwanted characters,
17
00:00:47,470 --> 00:00:50,730
or even code, from the input data, all right?
18
00:00:50,730 --> 00:00:53,210
And this is actually a crucial step, like,
19
00:00:53,210 --> 00:00:56,180
a golden standard in back-end development.
20
00:00:56,180 --> 00:00:58,690
To never, ever accept input data
21
00:00:58,690 --> 00:01:00,690
coming from a user as it is.
22
00:01:00,690 --> 00:01:03,860
So, we always need to sanitize that incoming data.
23
00:01:03,860 --> 00:01:06,350
But, anyway, I will leave data sanitization
24
00:01:06,350 --> 00:01:08,620
for the security section of the course,
25
00:01:08,620 --> 00:01:10,070
so that in this lecture
26
00:01:10,070 --> 00:01:13,400
we can focus entirely on data validation.
27
00:01:13,400 --> 00:01:15,430
And we are doing this data validation
28
00:01:15,430 --> 00:01:17,240
right here on the model.
29
00:01:17,240 --> 00:01:20,130
And that, again, is because of the fat model
30
00:01:20,130 --> 00:01:22,110
and thin controller philosophy,
31
00:01:22,110 --> 00:01:24,230
which makes the model the perfect place
32
00:01:24,230 --> 00:01:26,770
to perform validation, right?
33
00:01:26,770 --> 00:01:29,540
And, in fact, Mongoose already comes with a bunch
34
00:01:29,540 --> 00:01:32,230
of validation tools out of the box.
35
00:01:32,230 --> 00:01:36,120
And so, let's now actually do some data validation here.
36
00:01:36,120 --> 00:01:37,680
And actually, we already did.
37
00:01:37,680 --> 00:01:41,850
So, when we used this require here, that is actually
38
00:01:41,850 --> 00:01:45,290
already a built in data validator, all right?
39
00:01:45,290 --> 00:01:48,368
So you see that we use a validator like required
40
00:01:48,368 --> 00:01:50,970
right here in the schema type options.
41
00:01:50,970 --> 00:01:54,340
And required is actually available for all the data types.
42
00:01:54,340 --> 00:01:56,870
So, not just strings, but really everything.
43
00:01:56,870 --> 00:02:00,010
Numbers, Booleans, dates, or really,
44
00:02:00,010 --> 00:02:01,930
whatever type you're using.
45
00:02:01,930 --> 00:02:04,970
Then we also have unique here, but please note,
46
00:02:04,970 --> 00:02:08,610
that this is actually, technically, not a validator.
47
00:02:08,610 --> 00:02:10,169
It will still produce an error
48
00:02:10,169 --> 00:02:12,080
when we have a duplicate name,
49
00:02:12,080 --> 00:02:15,167
but again, this is not really a validator, all right?
50
00:02:15,167 --> 00:02:17,790
But, required is a validator,
51
00:02:17,790 --> 00:02:20,403
and so I'm going to show you now another one
52
00:02:20,403 --> 00:02:23,000
which is specifically just for strings,
53
00:02:23,000 --> 00:02:26,870
which is called max length and also min length.
54
00:02:26,870 --> 00:02:28,160
So, we have max length
55
00:02:30,320 --> 00:02:32,830
and as the name says, we use this to specify
56
00:02:32,830 --> 00:02:35,470
the maximum length that a string can have.
57
00:02:35,470 --> 00:02:37,490
And if it's longer than that, well then,
58
00:02:37,490 --> 00:02:39,800
it's going to produce an error, all right?
59
00:02:39,800 --> 00:02:42,936
So, let's do that just like we did before with required,
60
00:02:42,936 --> 00:02:47,170
where we specified an array, and then set the value.
61
00:02:47,170 --> 00:02:50,940
So, let's say we want 40 as the maximum string length,
62
00:02:50,940 --> 00:02:53,920
and then, we add the error after that.
63
00:02:53,920 --> 00:02:56,850
So, basically, the error message that we get.
64
00:02:56,850 --> 00:03:01,093
So, a tour name must have
65
00:03:05,410 --> 00:03:08,693
less or equal then 40 characters.
66
00:03:10,880 --> 00:03:13,320
Okay, so, that is max length,
67
00:03:13,320 --> 00:03:15,673
and then we also have min length.
68
00:03:18,600 --> 00:03:22,480
All right, and so let's set that one to 10,
69
00:03:22,480 --> 00:03:27,480
so a tour name must have more or equal then 10 characters.
70
00:03:29,010 --> 00:03:33,590
Okay, and so just like this we have these two validators
71
00:03:33,590 --> 00:03:37,320
that are actually only available on strings, okay?
72
00:03:37,320 --> 00:03:40,690
And, so let's now actually go ahead and try that.
73
00:03:40,690 --> 00:03:42,690
So, I'm going to create a new tour here.
74
00:03:44,570 --> 00:03:46,453
And, this is not a secret tour,
75
00:03:48,050 --> 00:03:50,183
but then here the rest does not matter.
76
00:03:53,550 --> 00:03:56,100
I will just call this one Test Tour,
77
00:03:56,100 --> 00:03:58,160
and let's see how many characters we have,
78
00:03:58,160 --> 00:04:00,280
so four plus one, plus four,
79
00:04:00,280 --> 00:04:02,130
so we only have nine characters.
80
00:04:02,130 --> 00:04:05,223
And so, we should now expect to actually get an error.
81
00:04:06,490 --> 00:04:07,980
So, let's try that out.
82
00:04:07,980 --> 00:04:09,910
And, indeed, a tour name must have
83
00:04:09,910 --> 00:04:12,460
more or equal then 10 characters.
84
00:04:12,460 --> 00:04:15,873
Great, but now what about updating tours?
85
00:04:17,290 --> 00:04:19,860
So, let's get one of these here.
86
00:04:19,860 --> 00:04:23,910
So, we have this test tour two here,
87
00:04:23,910 --> 00:04:25,963
so let's try to update this one.
88
00:04:27,540 --> 00:04:30,173
So, we go to our update tour route.
89
00:04:33,690 --> 00:04:38,023
And now let's here, change the name to Test,
90
00:04:39,890 --> 00:04:43,240
send the request, and, we get the same error.
91
00:04:43,240 --> 00:04:45,540
Now, this only works because of a setting
92
00:04:45,540 --> 00:04:47,400
that we set way back,
93
00:04:47,400 --> 00:04:50,600
when we implemented this updating handler.
94
00:04:50,600 --> 00:04:53,853
So, let me quickly show that to you in the tour controller.
95
00:04:54,860 --> 00:04:57,846
Delete and update, and so it's because of this option
96
00:04:57,846 --> 00:05:00,255
here runValidators, set to true
97
00:05:00,255 --> 00:05:03,180
that the validators are run again.
98
00:05:03,180 --> 00:05:04,959
If I set it now to false,
99
00:05:04,959 --> 00:05:09,750
then Mongoose should happily accept this name.
100
00:05:09,750 --> 00:05:12,673
And indeed, it does, all right.
101
00:05:14,880 --> 00:05:17,072
So, let's set it back to something longer,
102
00:05:17,072 --> 00:05:18,453
it doesn't matter,
103
00:05:20,630 --> 00:05:24,073
okay, and if I set it back to true,
104
00:05:26,950 --> 00:05:29,070
then it should not accept it,
105
00:05:29,070 --> 00:05:33,140
and indeed, we get our error back, all right?
106
00:05:33,140 --> 00:05:34,540
So, just wanted to quickly
107
00:05:34,540 --> 00:05:36,763
show you the fact of that setting.
108
00:05:38,820 --> 00:05:42,370
All right, and so, yeah, these are now working.
109
00:05:42,370 --> 00:05:46,030
Let's try a couple of more validators here.
110
00:05:46,030 --> 00:05:48,450
For example, now on numbers.
111
00:05:48,450 --> 00:05:51,520
So, let's go here to the ratings average.
112
00:05:51,520 --> 00:05:53,370
And we know that the rating must always
113
00:05:53,370 --> 00:05:57,330
be between one and zero, and we know that a rating
114
00:05:57,330 --> 00:06:00,880
must always be between one and five, okay?
115
00:06:00,880 --> 00:06:03,680
And so, very similar to the min and max length,
116
00:06:03,680 --> 00:06:06,253
on numbers we simply have min and max.
117
00:06:08,350 --> 00:06:11,353
So, the minimum that we want is one,
118
00:06:15,240 --> 00:06:17,253
and then again our error message.
119
00:06:18,280 --> 00:06:23,280
So, rating must be above 1.0, let's say.
120
00:06:26,360 --> 00:06:29,643
And then the max is five.
121
00:06:34,040 --> 00:06:38,660
Must be below 5.0, okay,
122
00:06:38,660 --> 00:06:40,873
and let's quickly test this one as well.
123
00:06:43,300 --> 00:06:48,300
So, creating a new tour, let's call it the Test Tour Amazing
124
00:06:49,390 --> 00:06:53,933
because it has an average rating of six.
125
00:06:55,020 --> 00:06:57,680
Okay, so let's see what happens then,
126
00:06:57,680 --> 00:07:00,380
and indeed, the rating must be below five.
127
00:07:00,380 --> 00:07:03,620
Okay, and so, that again is not going to work,
128
00:07:03,620 --> 00:07:06,930
and of course it cannot be zero, either.
129
00:07:06,930 --> 00:07:10,130
So, it must be above one, and of course,
130
00:07:10,130 --> 00:07:14,650
with four, it is gonna work, and indeed, here is our tour.
131
00:07:14,650 --> 00:07:18,180
Next up, I want to restrict this difficulty value here
132
00:07:18,180 --> 00:07:20,090
to only three difficulties.
133
00:07:20,090 --> 00:07:22,480
So, easy, medium, and difficult.
134
00:07:22,480 --> 00:07:24,660
And if the user puts in something else,
135
00:07:24,660 --> 00:07:26,360
then it's not going to work.
136
00:07:26,360 --> 00:07:27,623
So, let's try that out.
137
00:07:32,660 --> 00:07:36,420
So, the validator that we use for that is called enum,
138
00:07:36,420 --> 00:07:38,850
okay, and so, here we can pass an array
139
00:07:38,850 --> 00:07:41,403
of the values, basically, that are allowed.
140
00:07:42,570 --> 00:07:47,570
So, we have easy, we have medium, and we have difficult.
141
00:07:49,550 --> 00:07:53,380
All right, now we also want to specify our error message
142
00:07:53,380 --> 00:07:56,870
here, but right now that's not really possible, right?
143
00:07:56,870 --> 00:07:59,490
I mean, if we added another argument here,
144
00:07:59,490 --> 00:08:01,330
then that would not be for the error message,
145
00:08:01,330 --> 00:08:05,540
it would of course be for yet another possible value, okay?
146
00:08:05,540 --> 00:08:08,200
And so, the solution that we need to do here,
147
00:08:08,200 --> 00:08:10,993
is to create yet another object here,
148
00:08:11,900 --> 00:08:15,613
and then, actually specify that these here are the values.
149
00:08:18,870 --> 00:08:23,560
And then, our message, all right?
150
00:08:23,560 --> 00:08:26,230
And so, this is actually how it really works.
151
00:08:26,230 --> 00:08:29,040
This notation here is really just a shorthand for
152
00:08:29,040 --> 00:08:32,763
this complete object here, all right?
153
00:08:34,760 --> 00:08:39,760
So, difficulty is either: easy, medium, or difficult.
154
00:08:45,280 --> 00:08:50,280
Okay, and so, that is a very nice, very handy validator
155
00:08:50,323 --> 00:08:53,870
that is automatically available on all strings, okay,
156
00:08:53,870 --> 00:08:57,348
so, don't try to use this one here on numbers, for example.
157
00:08:57,348 --> 00:08:59,870
This is only for strings.
158
00:08:59,870 --> 00:09:02,540
And, by the way this min and max here
159
00:09:02,540 --> 00:09:04,450
is actually not only for numbers,
160
00:09:04,450 --> 00:09:07,820
but it's also gonna work with dates, all right?
161
00:09:07,820 --> 00:09:12,820
Anyway, let's now finally test this out as well.
162
00:09:13,180 --> 00:09:15,399
So, we need to change the name,
163
00:09:15,399 --> 00:09:17,249
and in here let's put something else,
164
00:09:20,460 --> 00:09:23,233
all right, and so indeed, we get our error.
165
00:09:24,770 --> 00:09:28,080
If we now put easy, then it works.
166
00:09:28,080 --> 00:09:30,450
Okay, and that's actually all I wanted to show you
167
00:09:30,450 --> 00:09:31,780
here in this lecture,
168
00:09:31,780 --> 00:09:35,110
but there are actually a bunch of other validators.
169
00:09:35,110 --> 00:09:38,259
For example, on strings you have a match validator
170
00:09:38,259 --> 00:09:40,370
in order to check if the input
171
00:09:40,370 --> 00:09:43,090
matches a given regular expression.
172
00:09:43,090 --> 00:09:46,460
But, I believe that these ones that I just showed you here
173
00:09:46,460 --> 00:09:49,250
are the most important built in validators.
174
00:09:49,250 --> 00:09:51,450
And, for a complete list of all of them,
175
00:09:51,450 --> 00:09:54,530
of course, you can always check out the documentation.
176
00:09:54,530 --> 00:09:57,590
Now we can also specify our own validators,
177
00:09:57,590 --> 00:09:59,790
and so, that is exactly what we will do
178
00:09:59,790 --> 00:10:01,363
right in the next video.
14236
Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.