All language subtitles for 028 Data Validation_ Custom Validators_Downloadly.ir_en

af Afrikaans
ak Akan
sq Albanian
am Amharic
ar Arabic
hy Armenian
az Azerbaijani
eu Basque
be Belarusian
bem Bemba
bn Bengali
bh Bihari
bs Bosnian
br Breton
bg Bulgarian
km Cambodian
ca Catalan
ceb Cebuano
chr Cherokee
ny Chichewa
zh-CN Chinese (Simplified)
zh-TW Chinese (Traditional)
co Corsican
hr Croatian
cs Czech
da Danish
nl Dutch
en English
eo Esperanto
et Estonian
ee Ewe
fo Faroese
tl Filipino
fi Finnish
fr French
fy Frisian
gaa Ga
gl Galician
ka Georgian
de German
el Greek
gn Guarani
gu Gujarati
ht Haitian Creole
ha Hausa
haw Hawaiian
iw Hebrew
hi Hindi
hmn Hmong
hu Hungarian
is Icelandic
ig Igbo
id Indonesian
ia Interlingua
ga Irish
it Italian
ja Japanese
jw Javanese
kn Kannada
kk Kazakh
rw Kinyarwanda
rn Kirundi
kg Kongo
ko Korean
kri Krio (Sierra Leone)
ku Kurdish
ckb Kurdish (Soranî)
ky Kyrgyz
lo Laothian
la Latin
lv Latvian
ln Lingala
lt Lithuanian
loz Lozi
lg Luganda
ach Luo
lb Luxembourgish
mk Macedonian
mg Malagasy
ms Malay
ml Malayalam
mt Maltese
mi Maori
mr Marathi
mfe Mauritian Creole
mo Moldavian
mn Mongolian
my Myanmar (Burmese)
sr-ME Montenegrin
ne Nepali
pcm Nigerian Pidgin
nso Northern Sotho
no Norwegian
nn Norwegian (Nynorsk)
oc Occitan
or Oriya
om Oromo
ps Pashto
fa Persian Download
pl Polish
pt-BR Portuguese (Brazil)
pt Portuguese (Portugal)
pa Punjabi
qu Quechua
ro Romanian
rm Romansh
nyn Runyakitara
ru Russian
sm Samoan
gd Scots Gaelic
sr Serbian
sh Serbo-Croatian
st Sesotho
tn Setswana
crs Seychellois Creole
sn Shona
sd Sindhi
si Sinhalese
sk Slovak
sl Slovenian
so Somali
es Spanish
es-419 Spanish (Latin American)
su Sundanese
sw Swahili
sv Swedish
tg Tajik
ta Tamil
tt Tatar
te Telugu
th Thai
ti Tigrinya
to Tonga
lua Tshiluba
tum Tumbuka
tr Turkish
tk Turkmen
tw Twi
ug Uighur
uk Ukrainian
ur Urdu
uz Uzbek
vi Vietnamese
cy Welsh
wo Wolof
xh Xhosa
yi Yiddish
yo Yoruba
zu Zulu
Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated: 1 00:00:01,150 --> 00:00:04,333 Next up, let's talk about custom validators. 2 00:00:05,939 --> 00:00:10,110 So sometimes the built-in validators are simply not enough. 3 00:00:10,110 --> 00:00:11,100 And in that case, 4 00:00:11,100 --> 00:00:14,250 we can also build our own custom validators. 5 00:00:14,250 --> 00:00:18,230 And a validator is actually really just a simple function 6 00:00:18,230 --> 00:00:21,250 which should return either true or false. 7 00:00:21,250 --> 00:00:24,330 And if it returns false, then it means there is an error. 8 00:00:24,330 --> 00:00:26,650 And on the other hand when we return true, 9 00:00:26,650 --> 00:00:28,690 then the validation is correct 10 00:00:28,690 --> 00:00:31,260 and the input can be accepted. 11 00:00:31,260 --> 00:00:35,560 Okay, so let's now build a simple custom validator here. 12 00:00:35,560 --> 00:00:39,980 And what I want to validate is if the price discount 13 00:00:39,980 --> 00:00:42,863 is actually lower than the price itself. 14 00:00:44,440 --> 00:00:46,130 That's something that we cannot do 15 00:00:46,130 --> 00:00:47,980 using the built-in validators 16 00:00:47,980 --> 00:00:49,980 and so we're simply gonna build our own. 17 00:00:52,575 --> 00:00:54,690 We need to now specify here an object 18 00:00:54,690 --> 00:00:56,453 for the SchemaType options. 19 00:01:00,170 --> 00:01:01,003 Alright. 20 00:01:05,190 --> 00:01:07,400 So the type is number, 21 00:01:07,400 --> 00:01:09,880 and then to specify our validator 22 00:01:09,880 --> 00:01:11,853 we use the validate property. 23 00:01:15,270 --> 00:01:17,580 Validate, and then as I said, 24 00:01:17,580 --> 00:01:19,173 a simple callback function. 25 00:01:21,600 --> 00:01:23,840 And again, not an arrow function, 26 00:01:23,840 --> 00:01:25,090 but a real function, 27 00:01:25,090 --> 00:01:26,200 because in this function 28 00:01:26,200 --> 00:01:28,730 we're gonna have access to the this variable, 29 00:01:28,730 --> 00:01:30,983 which will point to the current document. 30 00:01:31,940 --> 00:01:34,540 Now if you didn't need the this variable, 31 00:01:34,540 --> 00:01:37,140 then you could of course just use an arrow function. 32 00:01:39,710 --> 00:01:41,150 We have a callback function, 33 00:01:41,150 --> 00:01:43,910 and that callback function actually has access 34 00:01:43,910 --> 00:01:46,180 to the value that was inputted. 35 00:01:46,180 --> 00:01:50,330 So in this case, the price discount that the user specified. 36 00:01:50,330 --> 00:01:53,773 So that's what I call the value, val for short. 37 00:01:55,340 --> 00:01:57,550 Remember that we need to return either 38 00:01:57,550 --> 00:01:59,873 true or false from this validator. 39 00:02:04,090 --> 00:02:05,760 When do we want to return false, 40 00:02:05,760 --> 00:02:08,229 and when do we want to return true? 41 00:02:08,229 --> 00:02:11,210 Well, we want an error when the price discount 42 00:02:11,210 --> 00:02:13,553 is greater or equal than the price. 43 00:02:14,430 --> 00:02:17,000 And so basically what we want to return here 44 00:02:17,000 --> 00:02:19,800 is the test of testing 45 00:02:19,800 --> 00:02:23,493 if the value is less than this.price. 46 00:02:26,050 --> 00:02:30,210 All right, so let's say that the price discount 47 00:02:30,210 --> 00:02:33,693 is 100 and that the real price is 200. 48 00:02:35,090 --> 00:02:39,080 100 is less than 200, true and so we have no error. 49 00:02:39,080 --> 00:02:42,110 And that makes sense because that's exactly what we want. 50 00:02:42,110 --> 00:02:44,990 The price discount should always be lower. 51 00:02:44,990 --> 00:02:49,000 On the other hand, if the discount is 250, 52 00:02:49,000 --> 00:02:50,970 then this turns out to be false. 53 00:02:50,970 --> 00:02:54,623 And then false, remember, will trigger a validation error. 54 00:02:57,980 --> 00:02:59,530 Let's now test it out actually. 55 00:03:01,890 --> 00:03:02,723 Price 56 00:03:03,877 --> 00:03:06,800 (keyboard clacking) 57 00:03:06,800 --> 00:03:07,973 and price discount. 58 00:03:09,220 --> 00:03:12,000 And let's use the values that we used before 59 00:03:13,870 --> 00:03:17,133 and I also need to change the name here. 60 00:03:18,660 --> 00:03:22,990 Okay, so right now our discount is greater than the price 61 00:03:22,990 --> 00:03:24,833 and so we should get our error. 62 00:03:26,440 --> 00:03:30,560 Okay and indeed, we have a validation error. 63 00:03:30,560 --> 00:03:33,850 So failed for path price discount. 64 00:03:33,850 --> 00:03:37,020 Now, we do not have any custom message here 65 00:03:37,020 --> 00:03:39,113 and so let's quickly fix that. 66 00:03:40,230 --> 00:03:43,580 All right and the way we do that is in a very similar way 67 00:03:43,580 --> 00:03:45,650 as we did with the enum. 68 00:03:47,750 --> 00:03:50,510 So we need to actually specify another object 69 00:03:50,510 --> 00:03:52,313 and then set the message property. 70 00:03:55,830 --> 00:03:56,663 Validate 71 00:03:59,320 --> 00:04:00,940 should be an object 72 00:04:00,940 --> 00:04:03,280 and then we have our message in there 73 00:04:04,370 --> 00:04:06,510 and this function here will live 74 00:04:06,510 --> 00:04:08,597 in a property called validator. 75 00:04:15,639 --> 00:04:18,204 Okay and our message here will be 76 00:04:18,204 --> 00:04:21,527 (keyboard clacking) 77 00:04:21,527 --> 00:04:22,360 discount price 78 00:04:23,510 --> 00:04:24,343 should be 79 00:04:26,220 --> 00:04:27,693 below the regular price. 80 00:04:30,520 --> 00:04:34,840 Here we need a comma and so now we're good. 81 00:04:34,840 --> 00:04:38,480 And actually, one very nice trick is that this message here 82 00:04:38,480 --> 00:04:41,003 also has access to the value. 83 00:04:42,180 --> 00:04:44,930 And this works in kind of a weird way 84 00:04:44,930 --> 00:04:47,520 and this really is internal to Mongoose, 85 00:04:47,520 --> 00:04:49,610 so this has nothing to do with JavaScript 86 00:04:49,610 --> 00:04:54,283 so I can simply use the curly braces here and then value. 87 00:04:56,030 --> 00:04:58,020 So this piece here will get access 88 00:04:58,020 --> 00:04:59,900 to the value that was inputted, 89 00:04:59,900 --> 00:05:02,973 so it has the exact same value as this val variable. 90 00:05:06,150 --> 00:05:07,400 So let's test that again 91 00:05:08,720 --> 00:05:10,850 and now indeed we get our message 92 00:05:10,850 --> 00:05:15,800 and even access to the 250 price that we specified here. 93 00:05:15,800 --> 00:05:19,890 Now let's change it to 100 and so now it should work 94 00:05:19,890 --> 00:05:21,920 and yeah, it does. 95 00:05:21,920 --> 00:05:23,570 So, great. 96 00:05:23,570 --> 00:05:26,290 Now there is one very important caveat 97 00:05:26,290 --> 00:05:28,030 that we need to notice here 98 00:05:28,030 --> 00:05:30,763 and that is that inside a validator function, 99 00:05:30,763 --> 00:05:33,080 that this key word is only gonna point 100 00:05:33,080 --> 00:05:34,290 to the current document 101 00:05:34,290 --> 00:05:36,573 when we are creating a new document. 102 00:05:37,740 --> 00:05:40,653 So this function here is not going to work on update. 103 00:05:41,813 --> 00:05:44,143 And so that's very important to note. 104 00:05:45,412 --> 00:05:48,230 You see, that in Mongoose, there are a couple of caveats 105 00:05:48,230 --> 00:05:50,110 that you really need to be aware of 106 00:05:50,110 --> 00:05:51,990 when working with it. 107 00:05:51,990 --> 00:05:54,430 And I learned all of these by experience 108 00:05:54,430 --> 00:05:57,390 and so that's why now I'm able to tell them to you. 109 00:05:57,390 --> 00:06:00,550 So I run into an error once with this one 110 00:06:00,550 --> 00:06:02,090 and so from that time on, 111 00:06:02,090 --> 00:06:05,220 I know that I can only use this kind of validator 112 00:06:05,220 --> 00:06:07,160 with a this keyword in there 113 00:06:07,160 --> 00:06:09,730 when I'm actually creating new documents. 114 00:06:09,730 --> 00:06:12,143 So let me write that down here for you. 115 00:06:12,143 --> 00:06:15,143 (keyboard clacking) 116 00:06:25,210 --> 00:06:28,610 All right, so I hope that you're kind of taking note 117 00:06:28,610 --> 00:06:32,440 of all of these very important small pieces of information 118 00:06:32,440 --> 00:06:34,083 that are very important. 119 00:06:34,940 --> 00:06:36,680 The same thing down here. 120 00:06:36,680 --> 00:06:38,530 Remember that where I told you that 121 00:06:38,530 --> 00:06:42,100 this DOCUMENT MIDDLEWARE only really runs for save 122 00:06:42,100 --> 00:06:44,640 and create but not for update. 123 00:06:44,640 --> 00:06:46,700 And that's one of these other things 124 00:06:46,700 --> 00:06:49,013 that are really important to never forget. 125 00:06:51,330 --> 00:06:52,860 Now in this specific case here, 126 00:06:52,860 --> 00:06:55,870 there are actually ways around fixing this 127 00:06:55,870 --> 00:06:58,903 but they're very complicated and not really worth pursuing. 128 00:07:00,070 --> 00:07:02,810 And we could of course also write validator functions 129 00:07:02,810 --> 00:07:05,370 that do not rely on a this variable. 130 00:07:05,370 --> 00:07:08,000 So in this case, we only need it because we are comparing 131 00:07:08,000 --> 00:07:11,363 one value with the value of another field. 132 00:07:14,150 --> 00:07:17,370 This is a custom validator that we can use in Mongoose 133 00:07:17,370 --> 00:07:20,180 and that we did actually write ourself. 134 00:07:20,180 --> 00:07:23,170 But also, there are a couple of libraries on npm 135 00:07:23,170 --> 00:07:26,300 for data validation that we can simply plug in here 136 00:07:26,300 --> 00:07:30,183 as custom validators that we do not have to write ourselves. 137 00:07:31,394 --> 00:07:34,370 And the most popular library is called validator 138 00:07:34,370 --> 00:07:36,883 and so let's actually take a look at that one. 139 00:07:41,490 --> 00:07:44,520 Validator and then I'm searching for GitHub 140 00:07:44,520 --> 00:07:48,620 because usually all of these libraries are always on GitHub. 141 00:07:48,620 --> 00:07:51,300 And the documentation is also gonna be there 142 00:07:52,210 --> 00:07:53,660 and so here you see 143 00:07:55,060 --> 00:07:56,330 that validator 144 00:07:56,330 --> 00:07:59,773 is a library of string validators and sanitizers. 145 00:08:01,155 --> 00:08:05,310 You also see that it's quite popular with 13,00 stars 146 00:08:05,310 --> 00:08:06,500 and so 147 00:08:06,500 --> 00:08:08,033 that's very good. 148 00:08:09,880 --> 00:08:11,830 We also see this library validates 149 00:08:11,830 --> 00:08:13,683 and sanitize only strings. 150 00:08:15,562 --> 00:08:18,280 Here is then all of the stuff how we install it 151 00:08:18,280 --> 00:08:21,070 and how we use it but that's kind of simple. 152 00:08:21,070 --> 00:08:22,655 We already know that. 153 00:08:22,655 --> 00:08:24,650 But what I want to show you is the list 154 00:08:24,650 --> 00:08:26,990 of all the available validators. 155 00:08:26,990 --> 00:08:29,490 For example, we have isAlpha, 156 00:08:29,490 --> 00:08:32,900 which is gonna check if the string contains only letters. 157 00:08:32,900 --> 00:08:36,140 We have Alphanumeric so only letters and numbers 158 00:08:36,980 --> 00:08:38,909 and we really have a lot of stuff here. 159 00:08:38,909 --> 00:08:40,820 So check if a string is boolian, 160 00:08:40,820 --> 00:08:43,870 or check if the string is a credit card, 161 00:08:43,870 --> 00:08:46,160 so valid credit card number. 162 00:08:46,160 --> 00:08:48,700 Or if it's a currency 163 00:08:48,700 --> 00:08:52,860 or you see really all kinds of different tests. 164 00:08:52,860 --> 00:08:56,783 For example an ISBN, so for checking book numbers. 165 00:08:59,020 --> 00:09:02,683 To test if it's an integer or if the string is lowercase. 166 00:09:03,740 --> 00:09:07,050 And so you see, whenever you need some data validation 167 00:09:07,050 --> 00:09:08,970 you can grab one of these libraries 168 00:09:08,970 --> 00:09:11,993 and simply plug them into your Mongoose validators. 169 00:09:13,650 --> 00:09:15,560 Now many of the things that are here 170 00:09:15,560 --> 00:09:17,800 are actually already built into Mongoose 171 00:09:17,800 --> 00:09:20,810 and so we don't need all of them, okay, 172 00:09:20,810 --> 00:09:23,010 but there is one very specific, 173 00:09:23,010 --> 00:09:25,880 which I want to use, which is isAlpha. 174 00:09:25,880 --> 00:09:30,290 So I want to check if the tour name only contains letters. 175 00:09:30,290 --> 00:09:32,200 And so for that I can use this function 176 00:09:32,200 --> 00:09:33,963 from the validator library. 177 00:09:35,940 --> 00:09:36,773 Let's go back 178 00:09:38,804 --> 00:09:40,000 and start by installing 179 00:09:41,660 --> 00:09:42,493 npm 180 00:09:42,493 --> 00:09:43,877 i 181 00:09:43,877 --> 00:09:45,270 (keyboard clacking) 182 00:09:45,270 --> 00:09:46,163 validator. 183 00:09:52,614 --> 00:09:53,793 That was successful. 184 00:09:56,481 --> 00:09:57,931 Then I need to import it here 185 00:10:01,430 --> 00:10:05,363 and so now we're good to go to actually use it here. 186 00:10:07,380 --> 00:10:08,530 I'm gonna use it here 187 00:10:08,530 --> 00:10:10,790 and again, I use the validate property 188 00:10:12,510 --> 00:10:13,900 and now all I need to do 189 00:10:13,900 --> 00:10:16,253 is to really plug in the function here. 190 00:10:18,470 --> 00:10:21,350 And in validator, it works like this, 191 00:10:21,350 --> 00:10:23,530 where validator is an object 192 00:10:23,530 --> 00:10:26,330 and on there we have then all these methods. 193 00:10:26,330 --> 00:10:27,560 Validator 194 00:10:27,560 --> 00:10:28,393 is 195 00:10:30,240 --> 00:10:31,073 Alpha, 196 00:10:31,073 --> 00:10:32,490 so that's the one that we just choose 197 00:10:32,490 --> 00:10:33,783 from the documentation. 198 00:10:34,936 --> 00:10:36,090 And that's actually it. 199 00:10:36,090 --> 00:10:37,760 So we don't call it here. 200 00:10:37,760 --> 00:10:39,900 We basically just specify 201 00:10:39,900 --> 00:10:42,780 that this is a function that should be used. 202 00:10:42,780 --> 00:10:45,920 Just like our own one, like our own validator, 203 00:10:45,920 --> 00:10:46,830 we didn't call it. 204 00:10:46,830 --> 00:10:48,870 We simply put this callback function here 205 00:10:48,870 --> 00:10:49,970 that it's gonna be called 206 00:10:49,970 --> 00:10:52,153 as soon as the data should be validated. 207 00:10:54,527 --> 00:10:56,090 And so here, it's the same. 208 00:10:56,090 --> 00:10:58,490 Now, if we wanna specify an error message, 209 00:10:58,490 --> 00:11:00,550 it works just like up here. 210 00:11:00,550 --> 00:11:04,180 We can specify an array and then the error message 211 00:11:04,180 --> 00:11:05,850 after the callback function. 212 00:11:05,850 --> 00:11:07,883 And we could have done it down here. 213 00:11:09,120 --> 00:11:11,000 So here we did it differently. 214 00:11:11,000 --> 00:11:13,230 Here we then created this new object 215 00:11:13,230 --> 00:11:16,010 with validator in there and the message, 216 00:11:16,010 --> 00:11:18,220 but we could've done it with an array as well, 217 00:11:18,220 --> 00:11:20,183 but that would've looked weird. 218 00:11:21,130 --> 00:11:23,830 But up here, since the function is so small, 219 00:11:23,830 --> 00:11:26,540 so this is so small, we can simply put it here 220 00:11:26,540 --> 00:11:29,040 and then as a second argument in the array 221 00:11:29,040 --> 00:11:30,463 add the error message. 222 00:11:32,640 --> 00:11:35,110 Tour name must only contain 223 00:11:35,973 --> 00:11:39,310 (keyboard clacking) characters. 224 00:11:39,310 --> 00:11:41,053 Great, check that out. 225 00:11:42,320 --> 00:11:47,053 Back in Postman here, let's get rid of our price discount. 226 00:11:48,990 --> 00:11:51,290 And let's add some number here. 227 00:11:51,290 --> 00:11:53,140 And so that should then fail the test 228 00:11:54,450 --> 00:11:57,433 and indeed, the name must only contain characters. 229 00:11:59,760 --> 00:12:01,430 Let's get rid of that. 230 00:12:01,430 --> 00:12:02,760 We can also not use this name. 231 00:12:02,760 --> 00:12:05,040 We already used it before, 232 00:12:05,040 --> 00:12:08,500 so that can be write out too here with characters 233 00:12:10,060 --> 00:12:13,503 and we still get this error here. 234 00:12:15,470 --> 00:12:18,830 Well, that's probably because of the spaces. 235 00:12:18,830 --> 00:12:20,970 So let's just get rid of the spaces, 236 00:12:20,970 --> 00:12:23,900 which of course is not gonna be real useful 237 00:12:23,900 --> 00:12:25,910 and indeed, now it works. 238 00:12:25,910 --> 00:12:27,900 So the problem was the spaces, 239 00:12:27,900 --> 00:12:30,483 but obviously we want to keep the spaces here. 240 00:12:32,650 --> 00:12:36,400 In fact, this validation error is not really useful 241 00:12:36,400 --> 00:12:37,993 and so I will get rid of it. 242 00:12:39,340 --> 00:12:42,430 Consider that this here was only to demonstrate 243 00:12:42,430 --> 00:12:45,030 that we can use an external library like this 244 00:12:45,030 --> 00:12:46,880 to perform validation. 245 00:12:46,880 --> 00:12:49,670 And actually, we will still use this library a bit later 246 00:12:49,670 --> 00:12:53,390 when we check if the user email is actually valid. 247 00:12:53,390 --> 00:12:54,860 So that's another nice function 248 00:12:54,860 --> 00:12:56,873 that is included in this library. 249 00:12:58,788 --> 00:13:00,290 So again, this is how it works. 250 00:13:00,290 --> 00:13:02,270 Not really useful in this case, 251 00:13:02,270 --> 00:13:04,050 so if we really wanted to test 252 00:13:04,050 --> 00:13:08,160 if the string only contains letters and spaces 253 00:13:08,160 --> 00:13:09,700 it would probably be simpler 254 00:13:09,700 --> 00:13:12,250 to simply use a regular expression 255 00:13:12,250 --> 00:13:14,153 to test for that kind of pattern. 256 00:13:15,210 --> 00:13:16,500 But I'm not gonna do that here 257 00:13:16,500 --> 00:13:18,410 because this lecture was more about 258 00:13:18,410 --> 00:13:20,230 these custom validators. 259 00:13:20,230 --> 00:13:23,810 Anyway, with this lecture, we are now ready 260 00:13:23,810 --> 00:13:25,863 with the introduction to Mongoose. 261 00:13:27,370 --> 00:13:29,500 Now as you can imagine, there is of course 262 00:13:29,500 --> 00:13:31,530 still a lot to learn about Mongoose 263 00:13:31,530 --> 00:13:34,540 and in fact, we have a advanced Mongoose section 264 00:13:34,540 --> 00:13:36,010 a bit later in the course 265 00:13:36,010 --> 00:13:38,010 and of course also in the other sections, 266 00:13:38,010 --> 00:13:39,710 you will keep learning more and more 267 00:13:39,710 --> 00:13:41,390 about how to use Mongoose 268 00:13:41,390 --> 00:13:43,183 in a real professional way. 269 00:13:44,380 --> 00:13:47,070 You have already learned so much up until this point, 270 00:13:47,070 --> 00:13:50,630 so huge congratulations for making it this far 271 00:13:50,630 --> 00:13:53,680 and it's great to see that you're still with me here. 272 00:13:53,680 --> 00:13:56,913 So great job and I hope to see you soon. 20603

Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.