All language subtitles for 018 Logging in Users with Our API - Part 3_Downloadly.ir_en

af Afrikaans
sq Albanian
am Amharic
ar Arabic
hy Armenian
az Azerbaijani
eu Basque
be Belarusian
bn Bengali
bs Bosnian
bg Bulgarian
ca Catalan
ceb Cebuano
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
tl Filipino
fi Finnish
fr French
fy Frisian
gl Galician
ka Georgian
de German
el Greek
gu Gujarati
ht Haitian Creole
ha Hausa
haw Hawaiian
iw Hebrew
hi Hindi
hmn Hmong
hu Hungarian
is Icelandic
ig Igbo
id Indonesian
ga Irish
it Italian
ja Japanese
jw Javanese
kn Kannada
kk Kazakh
km Khmer
ko Korean
ku Kurdish (Kurmanji)
ky Kyrgyz
lo Lao
la Latin
lv Latvian
lt Lithuanian
lb Luxembourgish
mk Macedonian
mg Malagasy
ms Malay
ml Malayalam
mt Maltese
mi Maori
mr Marathi
mn Mongolian
my Myanmar (Burmese)
ne Nepali
no Norwegian
ps Pashto
fa Persian Download
pl Polish
pt Portuguese
pa Punjabi
ro Romanian
ru Russian
sm Samoan
gd Scots Gaelic
sr Serbian
st Sesotho
sn Shona
sd Sindhi
si Sinhala
sk Slovak
sl Slovenian
so Somali
es Spanish
su Sundanese
sw Swahili
sv Swedish
tg Tajik
ta Tamil
te Telugu
th Thai
tr Turkish
uk Ukrainian
ur Urdu
uz Uzbek
vi Vietnamese
cy Welsh
xh Xhosa
yi Yiddish
yo Yoruba
zu Zulu
or Odia (Oriya)
rw Kinyarwanda
tk Turkmen
tt Tatar
ug Uyghur
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,293 Let's now finally finish up 2 00:00:03,293 --> 00:00:05,413 this login functionality part. 3 00:00:06,980 --> 00:00:09,300 And remember how I said that in this video 4 00:00:09,300 --> 00:00:11,790 I wanted to implement a really nice alert 5 00:00:11,790 --> 00:00:15,010 for when the user successfully logs in, and so 6 00:00:16,450 --> 00:00:19,210 to see that let's log the user out 7 00:00:19,210 --> 00:00:21,663 for now by removing the cookie manually. 8 00:00:22,700 --> 00:00:24,760 Let's reload, and so now of course 9 00:00:24,760 --> 00:00:26,883 the user should no longer be logged in, 10 00:00:28,840 --> 00:00:30,720 and indeed it isn't. 11 00:00:30,720 --> 00:00:33,120 As we already know, that's because the cookie 12 00:00:33,120 --> 00:00:35,410 wasn't sent in the request. 13 00:00:35,410 --> 00:00:37,790 So there is logged in middleware that we created 14 00:00:37,790 --> 00:00:39,050 in the last video 15 00:00:39,050 --> 00:00:42,840 did not put the user object into response.locals, 16 00:00:42,840 --> 00:00:44,320 remember that? 17 00:00:44,320 --> 00:00:47,810 So if it's not there the user manual will not be rendered, 18 00:00:47,810 --> 00:00:50,650 and instead this part gets rendered 19 00:00:50,650 --> 00:00:53,367 so that we now can click here on Log In. 20 00:00:53,367 --> 00:00:56,920 So that alert that I was talking about before 21 00:00:56,920 --> 00:00:59,760 I want it to show up here basically at the beginning 22 00:00:59,760 --> 00:01:01,470 and then after a second and a half 23 00:01:01,470 --> 00:01:04,000 we still want to do that reload. 24 00:01:04,000 --> 00:01:07,610 So moving to the main homepage. 25 00:01:07,610 --> 00:01:09,550 Anyway let's create some functions 26 00:01:09,550 --> 00:01:13,800 for this alert in yet another separate file. 27 00:01:13,800 --> 00:01:14,983 So new file, 28 00:01:16,607 --> 00:01:18,853 alert.js. 29 00:01:20,210 --> 00:01:23,320 All right, but now before we can actually move on 30 00:01:23,320 --> 00:01:24,510 we need to think a little bit 31 00:01:24,510 --> 00:01:26,890 about our front-end architecture here. 32 00:01:26,890 --> 00:01:30,070 Now this course, of course, is not about the front-end, 33 00:01:30,070 --> 00:01:32,470 but still we need to at least care 34 00:01:32,470 --> 00:01:34,170 a little bit about it here, 35 00:01:34,170 --> 00:01:36,080 because we're really starting to get 36 00:01:36,080 --> 00:01:38,130 a nice amount of files here, 37 00:01:38,130 --> 00:01:40,420 and including all of them into our pages 38 00:01:40,420 --> 00:01:42,550 is not a good practice. 39 00:01:42,550 --> 00:01:43,383 So 40 00:01:44,770 --> 00:01:46,700 such as we've been doing here. 41 00:01:46,700 --> 00:01:48,710 So this is not a good practice. 42 00:01:48,710 --> 00:01:51,200 We should only have one big JavaScript file 43 00:01:51,200 --> 00:01:53,340 which includes all the code. 44 00:01:53,340 --> 00:01:56,000 So in modern JavaScript front-end development 45 00:01:56,000 --> 00:01:59,150 we usually use something called a module bundler. 46 00:01:59,150 --> 00:02:02,210 The most popular one is probably still Webpack, 47 00:02:02,210 --> 00:02:04,700 but usually Webpack gives us a lot of problems 48 00:02:04,700 --> 00:02:07,140 and it's really a pain to set it up. 49 00:02:07,140 --> 00:02:11,380 So there's actually a very nice new kid on the block, 50 00:02:11,380 --> 00:02:13,930 so to say, which is called Parcel. 51 00:02:13,930 --> 00:02:18,930 So we'll take a look at that, see if it already shows up, 52 00:02:19,680 --> 00:02:21,870 and indeed, that's the one. 53 00:02:21,870 --> 00:02:26,490 So blazing fast, zero configuration web application bundler. 54 00:02:26,490 --> 00:02:29,080 So that's exactly what we're looking for. 55 00:02:29,080 --> 00:02:31,790 Simply a bundler which doesn't require 56 00:02:31,790 --> 00:02:34,240 any complex configurations, because 57 00:02:34,240 --> 00:02:36,340 we don't want to waste any time with that. 58 00:02:37,470 --> 00:02:41,753 All right, so let's just go ahead and install it here. 59 00:02:42,940 --> 00:02:44,340 So npm install 60 00:02:46,010 --> 00:02:48,603 and I'm not sure if it's just Parcel actually. 61 00:02:50,180 --> 00:02:51,013 So 62 00:02:52,509 --> 00:02:53,459 let's go back here. 63 00:02:55,860 --> 00:02:58,963 Probably that is Parcel.js or something, 64 00:02:59,820 --> 00:03:02,810 because I remember the last time I installed it 65 00:03:02,810 --> 00:03:06,850 it didn't work right away, so let's check that. 66 00:03:06,850 --> 00:03:08,993 Yeah, indeed, it is Parcel-bundler. 67 00:03:18,370 --> 00:03:20,300 Now we got some error. 68 00:03:20,300 --> 00:03:25,300 Okay, so I forgot to save it as a dev dependency. 69 00:03:27,070 --> 00:03:30,810 So we actually want it as a save dev, okay, 70 00:03:30,810 --> 00:03:33,910 and that's because it's a development tool. 71 00:03:33,910 --> 00:03:35,483 Now still something went wrong. 72 00:03:39,640 --> 00:03:41,313 Let me try it with sudo here. 73 00:03:50,150 --> 00:03:52,790 And so if it didn't work in your case as well 74 00:03:52,790 --> 00:03:56,943 then just use sudo in order to get the proper permissions. 75 00:04:03,360 --> 00:04:05,910 All right, so let's take a look at our package.json 76 00:04:07,060 --> 00:04:11,140 and indeed here it is, all right. 77 00:04:11,140 --> 00:04:12,620 Now if you're watching this video 78 00:04:12,620 --> 00:04:14,810 some time after I recorded it 79 00:04:14,810 --> 00:04:17,550 they might already have gone to version number two 80 00:04:18,550 --> 00:04:20,200 and that as we already know 81 00:04:20,200 --> 00:04:22,370 might introduce some breaking changes. 82 00:04:22,370 --> 00:04:25,840 And so going forward from this point if you get any errors 83 00:04:25,840 --> 00:04:27,740 that you didn't see here in the video 84 00:04:27,740 --> 00:04:30,940 then please go ahead and install this package here 85 00:04:30,940 --> 00:04:32,533 using version .1, 86 00:04:33,590 --> 00:04:34,750 okay. 87 00:04:34,750 --> 00:04:35,860 So basically 88 00:04:38,610 --> 00:04:41,650 add one like this, okay. 89 00:04:41,650 --> 00:04:45,630 So this then adverts you running into these weird errors 90 00:04:45,630 --> 00:04:48,100 and hopefully it also saves me 91 00:04:48,100 --> 00:04:50,110 from tons of negative comments 92 00:04:50,110 --> 00:04:54,330 or negative reviews that expect me to update all my videos 93 00:04:54,330 --> 00:04:57,640 every other week just because some tool gets updated, 94 00:04:57,640 --> 00:04:59,560 and of course that's not possible. 95 00:04:59,560 --> 00:05:01,330 So many times the easiest solution 96 00:05:01,330 --> 00:05:03,790 is simply for you to use the same version 97 00:05:03,790 --> 00:05:07,030 as I am using in the video, all right. 98 00:05:07,030 --> 00:05:10,420 Anyway, now in order to actually use Parcel 99 00:05:10,420 --> 00:05:12,973 let's add some scripts here. 100 00:05:15,410 --> 00:05:19,053 So I'm adding one to watch or JavaScript. 101 00:05:20,890 --> 00:05:22,400 Okay, and for that 102 00:05:24,380 --> 00:05:26,443 I use the Parcel watch command. 103 00:05:28,100 --> 00:05:31,250 This would actually already run just fine out of the box, 104 00:05:31,250 --> 00:05:33,810 but I still want to configure a little bit, 105 00:05:33,810 --> 00:05:36,890 because otherwise, it's gonna put me the final bundle 106 00:05:36,890 --> 00:05:39,270 in some folders that I don't want them. 107 00:05:39,270 --> 00:05:44,270 So let's specify which folder it actually should watch. 108 00:05:45,920 --> 00:05:50,920 So that's public/JavaScript and then index.js, 109 00:05:52,670 --> 00:05:54,190 so that's our entry point 110 00:05:54,190 --> 00:05:56,490 and that's the file that we're gonna create in a second. 111 00:05:56,490 --> 00:05:57,350 Okay. 112 00:05:57,350 --> 00:05:59,670 Then the output directory 113 00:06:03,432 --> 00:06:05,237 should also be into public.js, 114 00:06:06,980 --> 00:06:07,900 okay. 115 00:06:07,900 --> 00:06:09,700 Many times you will have different folders 116 00:06:09,700 --> 00:06:12,330 for the development and for the output, 117 00:06:12,330 --> 00:06:15,550 but in this case since it's a very simple architecture 118 00:06:15,550 --> 00:06:18,400 I'm going to put the bundle file right in the same place 119 00:06:18,400 --> 00:06:20,550 as the development files. 120 00:06:20,550 --> 00:06:23,000 All right, let's also specify the 121 00:06:25,102 --> 00:06:25,935 the output file 122 00:06:26,860 --> 00:06:30,733 and so that should be bundle.js, 123 00:06:31,720 --> 00:06:32,600 all right. 124 00:06:32,600 --> 00:06:35,750 So now I can run this and it will then take a look 125 00:06:35,750 --> 00:06:39,430 at this file here and see if something changes 126 00:06:39,430 --> 00:06:41,330 or in one of the dependencies 127 00:06:41,330 --> 00:06:43,110 and whenever that happens it will then 128 00:06:43,110 --> 00:06:45,260 bundle all of the files together again 129 00:06:45,260 --> 00:06:49,090 into this bundle.js file, all right. 130 00:06:49,090 --> 00:06:50,610 Then let's also duplicate this, 131 00:06:50,610 --> 00:06:53,720 because we also want a final, 132 00:06:53,720 --> 00:06:56,820 let's say production version, okay. 133 00:06:56,820 --> 00:06:59,040 So this one we are going to run ones where 134 00:06:59,040 --> 00:07:01,100 they're really finished, okay. 135 00:07:01,100 --> 00:07:03,450 So that takes a bit longer, but it also does 136 00:07:03,450 --> 00:07:06,630 a bit more optimization stuff, but 137 00:07:06,630 --> 00:07:08,710 that of course we don't need for development. 138 00:07:08,710 --> 00:07:12,130 In development as always, we just want it to work. 139 00:07:12,130 --> 00:07:14,090 So let's do npm run 140 00:07:15,970 --> 00:07:20,030 watch:js, but before we do that let's actually create 141 00:07:20,980 --> 00:07:22,473 the index.js. 142 00:07:23,370 --> 00:07:25,320 Let's close some of these folders here. 143 00:07:26,170 --> 00:07:28,283 It's a bit too confusing like this. 144 00:07:31,340 --> 00:07:34,890 So index.js and let's just do a simple 145 00:07:36,640 --> 00:07:38,403 console.log here for now. 146 00:07:39,670 --> 00:07:41,503 Hello from Parcel, 147 00:07:42,460 --> 00:07:43,293 all right. 148 00:07:45,480 --> 00:07:47,510 Then let's also go to our base here 149 00:07:47,510 --> 00:07:50,940 and then we'll actually now comment out all of these 150 00:07:50,940 --> 00:07:52,140 and only include 151 00:07:53,810 --> 00:07:55,163 the bundle file. 152 00:07:57,720 --> 00:08:01,790 So again, one file which will basically contain 153 00:08:01,790 --> 00:08:04,000 all the code that's in all the other files 154 00:08:04,000 --> 00:08:05,533 and all their dependencies. 155 00:08:06,910 --> 00:08:10,860 So let's give it a save, and now let's actually run this, 156 00:08:10,860 --> 00:08:12,033 see what we get there. 157 00:08:12,980 --> 00:08:17,170 And indeed, we got our new file, which is bundle.js 158 00:08:17,170 --> 00:08:21,000 and it has all this bunch of code already in there, 159 00:08:21,000 --> 00:08:25,663 okay, simply for this one line of code at this point. 160 00:08:26,820 --> 00:08:29,203 But anyway let's reload our page here, 161 00:08:31,510 --> 00:08:33,840 and hello from Parcel. 162 00:08:33,840 --> 00:08:38,140 So that worked, and so now let's go ahead 163 00:08:38,140 --> 00:08:40,342 and actually setup this file here. 164 00:08:42,200 --> 00:08:44,980 So to avoid confusion let's close 165 00:08:44,980 --> 00:08:47,180 these files that we no longer need 166 00:08:47,180 --> 00:08:48,923 for what we're doing right now. 167 00:08:51,320 --> 00:08:52,570 So that's a lot of stuff. 168 00:08:54,340 --> 00:08:56,900 All right, this one either. 169 00:08:56,900 --> 00:09:00,560 So now the idea is basically that this index.js file 170 00:09:00,560 --> 00:09:02,930 is our entry file, and so in this one 171 00:09:02,930 --> 00:09:05,500 we cannot get data from the user interface 172 00:09:05,500 --> 00:09:08,400 and then we delegate actions to some functions 173 00:09:08,400 --> 00:09:11,960 coming from these other modules here basically. 174 00:09:11,960 --> 00:09:13,870 So we have now the login module, 175 00:09:13,870 --> 00:09:15,830 we have our alerts module, 176 00:09:15,830 --> 00:09:17,950 and so just like in Node.js 177 00:09:17,950 --> 00:09:21,920 we can actually now export data from these modules. 178 00:09:21,920 --> 00:09:24,550 So let's do that, and what I want to export 179 00:09:24,550 --> 00:09:26,440 is this function here. 180 00:09:26,440 --> 00:09:28,030 Now it works a little bit different 181 00:09:28,030 --> 00:09:30,200 than it works with Node.js 182 00:09:30,200 --> 00:09:33,160 because Node.js uses something called CommonJS 183 00:09:33,160 --> 00:09:35,040 in order to implement modules. 184 00:09:35,040 --> 00:09:36,510 I'm not sure if I mentioned that 185 00:09:36,510 --> 00:09:38,600 when we first talked about modules, 186 00:09:38,600 --> 00:09:43,520 but here in front-end JavaScript since ES2015 or ES6 187 00:09:43,520 --> 00:09:47,000 there's something called modules in JavaScript as well. 188 00:09:47,000 --> 00:09:48,720 The syntax is a bit different, 189 00:09:48,720 --> 00:09:51,150 but actually the way it works behind the scenes, 190 00:09:51,150 --> 00:09:54,470 but actually if you understand how it works with CommonJS 191 00:09:54,470 --> 00:09:57,060 then this one here will be very similar. 192 00:09:57,060 --> 00:10:00,740 So ES6 modules use the export import syntax. 193 00:10:00,740 --> 00:10:04,070 So here all we need to do is to say export 194 00:10:05,120 --> 00:10:08,430 and then whatever we want to export from this file, 195 00:10:08,430 --> 00:10:10,110 and that's really it. 196 00:10:10,110 --> 00:10:13,170 Now this piece of code here we will actually use it 197 00:10:13,170 --> 00:10:15,100 in the index file. 198 00:10:15,100 --> 00:10:17,720 So remember how I said that this file here 199 00:10:17,720 --> 00:10:20,630 is more to really get data from the user interface 200 00:10:20,630 --> 00:10:22,420 and then delegate the action. 201 00:10:22,420 --> 00:10:26,203 So that's exactly what we are doing here, okay. 202 00:10:27,490 --> 00:10:30,320 So then here we only have this kind of module 203 00:10:30,320 --> 00:10:32,950 which then exports the login function. 204 00:10:32,950 --> 00:10:35,350 Then we can import that in here 205 00:10:36,370 --> 00:10:39,700 and call login right here in index.js 206 00:10:39,700 --> 00:10:41,620 and that works like this. 207 00:10:41,620 --> 00:10:44,210 So import instead of require 208 00:10:44,210 --> 00:10:47,690 then the name of the variable that we want to import. 209 00:10:47,690 --> 00:10:49,283 So I'm using curly braces here. 210 00:10:50,466 --> 00:10:51,960 So it's called login 211 00:10:55,420 --> 00:10:57,970 and then from the name of the file. 212 00:10:57,970 --> 00:11:01,493 Which in this case, same directory, login. 213 00:11:03,080 --> 00:11:06,363 Now let's also disable eslint here again, 214 00:11:10,730 --> 00:11:13,570 and I used these curly braces here, 215 00:11:13,570 --> 00:11:16,840 basically because we're doing the export in this way, 216 00:11:16,840 --> 00:11:20,070 but there's also something similar to module.export 217 00:11:20,070 --> 00:11:22,140 which is kind of the default export. 218 00:11:22,140 --> 00:11:26,780 So in ES6 modules it's actually called a default export. 219 00:11:26,780 --> 00:11:30,320 So in that case we then would not need these curly braces. 220 00:11:30,320 --> 00:11:31,153 Okay. 221 00:11:31,153 --> 00:11:33,750 Right now we need to do it like this, 222 00:11:33,750 --> 00:11:37,200 because well that's the name of this function 223 00:11:37,200 --> 00:11:39,110 that we exported, all right. 224 00:11:39,110 --> 00:11:42,860 Now something really important as well in this login 225 00:11:42,860 --> 00:11:44,350 is that we used axios. 226 00:11:44,350 --> 00:11:47,250 And remember how I said that we were going to install it 227 00:11:47,250 --> 00:11:51,040 actually from npm as an npm module, right? 228 00:11:51,040 --> 00:11:54,340 So let's do that now, and actually because we already 229 00:11:54,340 --> 00:11:56,660 commented out axios from here. 230 00:11:56,660 --> 00:11:59,560 So right now login cannot use axios. 231 00:11:59,560 --> 00:12:03,060 Well because we no longer included it here. 232 00:12:03,060 --> 00:12:06,070 So let's go add, open up a new terminal 233 00:12:06,070 --> 00:12:08,903 and install axios into our project. 234 00:12:18,310 --> 00:12:23,280 Then now all we need to do is to say import axios 235 00:12:25,830 --> 00:12:27,773 from axios, and that's it, 236 00:12:29,290 --> 00:12:30,260 all right. 237 00:12:30,260 --> 00:12:33,900 So this file, for now at least, is done 238 00:12:33,900 --> 00:12:36,530 but let's not close it because we will 239 00:12:36,530 --> 00:12:38,540 still need it very soon. 240 00:12:38,540 --> 00:12:42,020 Next up we should actually also install a polyfill, 241 00:12:42,020 --> 00:12:44,420 which will make some of the newer JavaScript features 242 00:12:44,420 --> 00:12:47,120 work in older browsers as well. 243 00:12:47,120 --> 00:12:50,360 So let's say npm install 244 00:12:50,360 --> 00:12:52,850 and then this one here looks a bit weird. 245 00:12:52,850 --> 00:12:57,850 So let's add babel/polyfill, 246 00:12:57,980 --> 00:12:59,240 like this. 247 00:12:59,240 --> 00:13:01,370 Then up here we will do 248 00:13:02,600 --> 00:13:03,433 import 249 00:13:06,180 --> 00:13:09,070 just like this, all right. 250 00:13:09,070 --> 00:13:12,290 So this one here we do not save it into any variable, 251 00:13:12,290 --> 00:13:14,200 because that's not necessary at all. 252 00:13:14,200 --> 00:13:17,640 All we want this to do is to basically be included 253 00:13:17,640 --> 00:13:20,840 into our final bundle to well polyfill 254 00:13:20,840 --> 00:13:23,337 some of the features of JavaScript. 255 00:13:23,337 --> 00:13:26,320 All right, and so that's also why it's here 256 00:13:26,320 --> 00:13:29,220 in the first line of these imports. 257 00:13:29,220 --> 00:13:33,960 Anyway, let's now import this mapbox as well. 258 00:13:33,960 --> 00:13:36,800 For that we actually need to first create a function 259 00:13:36,800 --> 00:13:40,640 which is going to do all of this stuff here. 260 00:13:40,640 --> 00:13:41,790 Okay. 261 00:13:41,790 --> 00:13:43,190 So let's create 262 00:13:45,450 --> 00:13:46,283 export 263 00:13:50,660 --> 00:13:54,363 displayMap, which will take in the array of locations. 264 00:13:55,620 --> 00:14:00,620 So that will then actually be read in the index.js file, 265 00:14:01,150 --> 00:14:02,290 all right. 266 00:14:02,290 --> 00:14:06,510 So again, index.js is more for getting data 267 00:14:06,510 --> 00:14:09,030 from the user interface, so from the website, 268 00:14:09,030 --> 00:14:13,110 and then delegating some actions into these other modules, 269 00:14:13,110 --> 00:14:14,230 all right. 270 00:14:14,230 --> 00:14:18,653 So therefore, this stuff here will be done inside of index. 271 00:14:21,010 --> 00:14:22,883 Let's do it up here. 272 00:14:28,750 --> 00:14:29,890 Then import 273 00:14:31,890 --> 00:14:32,723 displayMap 274 00:14:37,420 --> 00:14:38,343 mapbox, 275 00:14:39,310 --> 00:14:40,690 all right. 276 00:14:40,690 --> 00:14:42,640 So let's call that as well 277 00:14:45,980 --> 00:14:48,470 with the locations. 278 00:14:48,470 --> 00:14:52,420 Now remember way back when we actually created this map 279 00:14:52,420 --> 00:14:55,400 and remember how it asked us if we wanted to use 280 00:14:55,400 --> 00:14:57,760 the mapbox library on npm? 281 00:14:57,760 --> 00:15:00,670 So we could now go ahead and actually use that one 282 00:15:00,670 --> 00:15:04,590 instead of this one that we're using right now. 283 00:15:04,590 --> 00:15:06,450 So 284 00:15:06,450 --> 00:15:07,993 well it's not here. 285 00:15:09,850 --> 00:15:10,693 Yeah, so this one. 286 00:15:10,693 --> 00:15:13,170 So this here is the mapbox library 287 00:15:13,170 --> 00:15:15,330 that we're currently using, but again 288 00:15:15,330 --> 00:15:17,290 there's also an npm version. 289 00:15:17,290 --> 00:15:20,290 So then we would not need to have this one. 290 00:15:20,290 --> 00:15:22,620 However, for some reason there's a problem with 291 00:15:22,620 --> 00:15:26,410 using this library together with Parcel, okay. 292 00:15:26,410 --> 00:15:29,430 So other people actually run into this issue. 293 00:15:29,430 --> 00:15:32,370 So we cannot use the mapbox npm library 294 00:15:32,370 --> 00:15:34,080 together with Parcel. 295 00:15:34,080 --> 00:15:36,993 So that's a reason why I'm still doing it like this. 296 00:15:38,850 --> 00:15:39,810 Okay. 297 00:15:39,810 --> 00:15:43,360 So mapbox is completed with this. 298 00:15:43,360 --> 00:15:45,533 This we don't need anymore, as well. 299 00:15:46,470 --> 00:15:49,150 Now let's actually get rid of some of these errors 300 00:15:49,150 --> 00:15:50,593 that we saw down here. 301 00:15:51,510 --> 00:15:53,060 Well now they're no longer here, 302 00:15:53,060 --> 00:15:55,500 but for example we had the problem that 303 00:15:55,500 --> 00:15:57,630 this code here created some errors 304 00:15:57,630 --> 00:16:02,280 when we were on pages that didn't have this map here, right. 305 00:16:02,280 --> 00:16:05,310 Because of course on the detail page has this map 306 00:16:05,310 --> 00:16:07,890 so this element, but then this code of course 307 00:16:07,890 --> 00:16:09,203 runs on all the other pages, 308 00:16:09,203 --> 00:16:10,973 that will then create errors there. 309 00:16:11,840 --> 00:16:13,700 So let's fix that. 310 00:16:13,700 --> 00:16:15,980 So what I'm doing here is first to create an element 311 00:16:15,980 --> 00:16:18,950 with this and then test if it actually exists 312 00:16:18,950 --> 00:16:20,933 before we execute this line of code. 313 00:16:23,610 --> 00:16:25,660 So we will create some DOM elements here. 314 00:16:32,415 --> 00:16:33,248 And here I'd say 315 00:16:34,820 --> 00:16:35,683 delegation. 316 00:16:39,750 --> 00:16:41,380 So if mapbox 317 00:16:43,370 --> 00:16:46,623 and only then to these two actions here, 318 00:16:47,690 --> 00:16:48,790 okay. 319 00:16:48,790 --> 00:16:50,350 Here it's also then mapbox 320 00:16:52,420 --> 00:16:53,853 and that's much nicer. 321 00:16:57,190 --> 00:16:58,850 Here let's also put values, 322 00:16:58,850 --> 00:17:00,630 and I'm going to put these two 323 00:17:00,630 --> 00:17:03,690 because actually we might need them 324 00:17:03,690 --> 00:17:07,140 or actually we will need them for other stuff as well. 325 00:17:07,140 --> 00:17:08,803 So this way it's a bit cleaner. 326 00:17:10,170 --> 00:17:13,230 Let's also only add this event listener here 327 00:17:13,230 --> 00:17:16,660 if this element exists, right. 328 00:17:16,660 --> 00:17:20,683 Because well, again, it will create an error if it doesn't. 329 00:17:22,260 --> 00:17:23,777 So loginform, 330 00:17:27,750 --> 00:17:28,583 and so 331 00:17:29,610 --> 00:17:30,443 if 332 00:17:33,770 --> 00:17:37,460 and then let's reuse it here, give it a save, 333 00:17:37,460 --> 00:17:39,363 and so now that looks better. 334 00:17:40,270 --> 00:17:41,103 Okay. 335 00:17:42,355 --> 00:17:44,113 Let's actually close this terminal. 336 00:17:45,500 --> 00:17:48,010 This you should of kept bundling our code together 337 00:17:48,010 --> 00:17:49,480 each time there's a save. 338 00:17:49,480 --> 00:17:50,980 Let's just save it here again. 339 00:17:53,600 --> 00:17:56,440 Okay, so I hope that changed now. 340 00:17:56,440 --> 00:17:58,203 So let's go ahead and try that out. 341 00:18:00,610 --> 00:18:03,800 So if you can still login at this point 342 00:18:03,800 --> 00:18:06,563 well then that means that it did actually work. 343 00:18:13,470 --> 00:18:15,850 Well maybe not. 344 00:18:15,850 --> 00:18:17,263 Let's try that again here. 345 00:18:21,360 --> 00:18:25,113 All right, so there's something wrong going on here. 346 00:18:26,430 --> 00:18:29,620 So as always let's log this email and password 347 00:18:29,620 --> 00:18:31,093 to the console here. 348 00:18:32,570 --> 00:18:35,300 I mean, because we already know that actually 349 00:18:35,300 --> 00:18:38,233 this function here is called, right. 350 00:18:39,260 --> 00:18:41,360 Otherwise, we wouldn't even get the error. 351 00:18:45,380 --> 00:18:49,560 Right, because that error is clearly coming from our API. 352 00:18:49,560 --> 00:18:53,403 So all of what we have here is actually working, I believe. 353 00:19:03,010 --> 00:19:04,763 Let's take a look at the console. 354 00:19:10,830 --> 00:19:14,610 So it appears that there are actually no 355 00:19:14,610 --> 00:19:16,193 username and password. 356 00:19:18,320 --> 00:19:19,153 Okay. 357 00:19:21,640 --> 00:19:22,640 I'm not sure why that is. 358 00:19:22,640 --> 00:19:26,003 Let's take a look if actually we do get something. 359 00:19:26,870 --> 00:19:29,350 So login and I will also 360 00:19:31,140 --> 00:19:33,963 log these right here, 361 00:19:34,950 --> 00:19:35,880 not here 362 00:19:37,930 --> 00:19:38,763 but here. 363 00:19:50,730 --> 00:19:52,600 And so apparently the problem 364 00:19:52,600 --> 00:19:55,060 must be that username and password 365 00:19:55,060 --> 00:19:57,220 are not really defined. 366 00:19:57,220 --> 00:20:00,140 Oh, and now of course I can see why that is. 367 00:20:00,140 --> 00:20:01,483 What a stupid mistake. 368 00:20:02,440 --> 00:20:04,900 So we're trying to read these values here, 369 00:20:04,900 --> 00:20:07,340 right in the beginning when the page loads, 370 00:20:07,340 --> 00:20:11,223 and of course at this point these values are not defined. 371 00:20:12,230 --> 00:20:15,400 So we of course can only define them 372 00:20:15,400 --> 00:20:19,103 right here in our event listener, right. 373 00:20:20,370 --> 00:20:22,800 So by the time this function here is called 374 00:20:22,800 --> 00:20:25,690 well then of course email and password are set 375 00:20:25,690 --> 00:20:28,143 so then it's the time where we can read them. 376 00:20:31,210 --> 00:20:33,423 So that was kind of stupid, 377 00:20:36,870 --> 00:20:39,470 but, you know, sometimes that kind of stuff happens. 378 00:20:46,560 --> 00:20:48,673 Now let's actually copy this here. 379 00:20:50,830 --> 00:20:53,460 This time we are logged in successfully, 380 00:20:53,460 --> 00:20:56,373 meaning that our code here still works. 381 00:20:57,740 --> 00:21:01,500 Great, and so now let's do the final part 382 00:21:01,500 --> 00:21:03,310 that we wanted to do in this lecture, 383 00:21:03,310 --> 00:21:07,373 which is actually creating these alerts, all right. 384 00:21:08,700 --> 00:21:13,700 So let's create a function called show alert and export it. 385 00:21:13,720 --> 00:21:16,790 So then in login we will import this function 386 00:21:16,790 --> 00:21:17,793 and use it there. 387 00:21:18,890 --> 00:21:21,070 So showAlert 388 00:21:23,583 --> 00:21:27,557 and this as an input will get a type and a message, 389 00:21:29,090 --> 00:21:31,010 so just like this. 390 00:21:31,010 --> 00:21:32,230 And this type 391 00:21:34,070 --> 00:21:35,600 is either success 392 00:21:38,170 --> 00:21:39,253 or error, 393 00:21:40,210 --> 00:21:41,043 okay. 394 00:21:41,043 --> 00:21:44,020 Because depending on this input we will then 395 00:21:44,020 --> 00:21:46,890 have different CSS for each of these alerts 396 00:21:46,890 --> 00:21:48,590 and you will see that in a second. 397 00:21:49,450 --> 00:21:52,360 So what we're gonna do is to basically create some 398 00:21:52,360 --> 00:21:56,233 HTML markup here and then insert that into our HTML, 399 00:21:57,210 --> 00:21:58,733 so it's something really easy. 400 00:22:00,530 --> 00:22:04,520 So a markup and the template string 401 00:22:04,520 --> 00:22:07,280 and now some nice HTML. 402 00:22:07,280 --> 00:22:11,370 So it's simply a div with a class of alert 403 00:22:13,110 --> 00:22:14,680 and then 404 00:22:14,680 --> 00:22:18,110 alert -- so a modifier 405 00:22:18,110 --> 00:22:19,113 with our type. 406 00:22:21,890 --> 00:22:24,450 Okay, and so that's why it needs to be either 407 00:22:24,450 --> 00:22:27,070 success or error. 408 00:22:27,070 --> 00:22:29,650 So let me quickly show that in CSS, 409 00:22:29,650 --> 00:22:32,800 because I think it's really important to really know 410 00:22:32,800 --> 00:22:36,530 how all of this plays together, okay. 411 00:22:36,530 --> 00:22:38,520 So here we have our alert class 412 00:22:38,520 --> 00:22:41,863 and then alert success and alert error. 413 00:22:43,300 --> 00:22:44,880 All right. 414 00:22:44,880 --> 00:22:48,273 As always let's disable eslint here, 415 00:22:49,840 --> 00:22:52,700 okay, and get rid of this 416 00:22:54,530 --> 00:22:57,570 and now of course here then goes the message 417 00:22:57,570 --> 00:22:59,193 that we pass into this function. 418 00:23:00,190 --> 00:23:01,970 Of course we could then go ahead and use this 419 00:23:01,970 --> 00:23:04,470 all over the application, but in this case 420 00:23:04,470 --> 00:23:08,150 we only need it actually here for our login. 421 00:23:08,150 --> 00:23:11,053 So document.queryselector, 422 00:23:11,890 --> 00:23:13,990 and so now here we select the element 423 00:23:13,990 --> 00:23:17,900 where we want to include this HTML that we just created. 424 00:23:17,900 --> 00:23:19,950 So that's actually right at the beginning 425 00:23:19,950 --> 00:23:21,530 of the body element. 426 00:23:21,530 --> 00:23:23,153 So right at the top of the page. 427 00:23:24,570 --> 00:23:25,473 So body, 428 00:23:27,570 --> 00:23:32,380 and then insert adjacent HTML, so this one here. 429 00:23:32,380 --> 00:23:34,720 If you took my complete JavaScript course 430 00:23:34,720 --> 00:23:37,793 then all of this here will be nothing new to you, 431 00:23:38,890 --> 00:23:39,810 okay. 432 00:23:39,810 --> 00:23:42,670 So here we can specify a couple of keywords, 433 00:23:42,670 --> 00:23:45,080 and in this case we want afterbegin. 434 00:23:45,080 --> 00:23:46,900 So basically what this means is 435 00:23:46,900 --> 00:23:50,763 inside of the body, but right at the beginning, all right. 436 00:23:52,580 --> 00:23:54,800 Then the HTML, so the markup, 437 00:23:54,800 --> 00:23:57,070 that we actually want to include. 438 00:23:57,070 --> 00:23:57,903 Great. 439 00:23:57,903 --> 00:24:00,760 So this is going to create a very simple alert 440 00:24:00,760 --> 00:24:04,900 based on type and method, but now we actually also 441 00:24:04,900 --> 00:24:07,193 want a function for hiding alerts. 442 00:24:08,380 --> 00:24:11,410 So let's create it here as well, export, 443 00:24:11,410 --> 00:24:14,103 and probably we don't even need it outside of here, 444 00:24:14,980 --> 00:24:18,480 but still for reusability it's always a good idea 445 00:24:18,480 --> 00:24:19,773 to export all of this. 446 00:24:21,410 --> 00:24:25,173 This one doesn't need to take in any argument. 447 00:24:27,250 --> 00:24:31,220 So now all we're gonna do is to 448 00:24:31,220 --> 00:24:33,780 select the element with the alert class 449 00:24:33,780 --> 00:24:36,700 and then after that remove it. 450 00:24:36,700 --> 00:24:38,167 So queryselector 451 00:24:40,120 --> 00:24:40,953 alert. 452 00:24:43,710 --> 00:24:45,803 So exactly the same class name as here. 453 00:24:46,720 --> 00:24:49,430 Then we need to use a JavaScript trick 454 00:24:49,430 --> 00:24:52,610 where we need to move one level up to the parent element 455 00:24:52,610 --> 00:24:55,700 and then from there remove a child element. 456 00:24:55,700 --> 00:24:59,380 So if there is an element then 457 00:24:59,380 --> 00:25:02,147 element.parentElement.removeChild 458 00:25:06,728 --> 00:25:08,478 and then the element. 459 00:25:09,413 --> 00:25:10,910 Okay. 460 00:25:10,910 --> 00:25:14,070 So again, that should just be basic JavaScript 461 00:25:14,070 --> 00:25:16,230 or basic DOM manipulation. 462 00:25:16,230 --> 00:25:18,150 So since this is a node course 463 00:25:18,150 --> 00:25:20,393 I'm not going to go deep into that. 464 00:25:21,680 --> 00:25:23,770 Anyway, what I want to do here now 465 00:25:23,770 --> 00:25:25,670 is to whenever we show an alert 466 00:25:25,670 --> 00:25:28,393 first hide all the alerts that already exist. 467 00:25:30,400 --> 00:25:32,340 So we always just to make sure 468 00:25:32,340 --> 00:25:34,353 always run hideAlert. 469 00:25:35,310 --> 00:25:39,150 Then finally I also always want to hide all the alerts 470 00:25:39,150 --> 00:25:40,383 after five seconds. 471 00:25:42,370 --> 00:25:44,480 So window setTimeout 472 00:25:46,885 --> 00:25:48,310 hideAlert 473 00:25:48,310 --> 00:25:50,220 after five 474 00:25:50,220 --> 00:25:51,790 seconds. 475 00:25:51,790 --> 00:25:54,533 All right, and now let's import that here. 476 00:25:58,030 --> 00:26:00,220 Display alert it was called, right? 477 00:26:00,220 --> 00:26:03,193 Oh showAlert, with type and message. 478 00:26:05,900 --> 00:26:06,973 So showAlert 479 00:26:08,140 --> 00:26:08,973 from 480 00:26:12,280 --> 00:26:15,730 right from that and so ... 481 00:26:15,730 --> 00:26:19,010 Yeah, so we want to use that right in this place. 482 00:26:19,010 --> 00:26:21,970 So instead of the JavaScript alert we want to do 483 00:26:23,297 --> 00:26:25,650 showAlert, all right, 484 00:26:25,650 --> 00:26:27,180 and here the same. 485 00:26:27,180 --> 00:26:29,220 We still need to specify the type here, 486 00:26:29,220 --> 00:26:30,380 and so that's success 487 00:26:32,925 --> 00:26:35,467 in this case and here 488 00:26:40,220 --> 00:26:42,630 it is error. 489 00:26:42,630 --> 00:26:44,193 We hit auto-completion. 490 00:26:46,450 --> 00:26:47,963 Okay, that's better. 491 00:26:48,890 --> 00:26:50,483 So let's test it out. 492 00:26:53,580 --> 00:26:56,923 And first of all we need to logout by deleting this cookie. 493 00:27:01,160 --> 00:27:02,990 Reload, 494 00:27:02,990 --> 00:27:03,993 login, 495 00:27:11,400 --> 00:27:13,900 and now I'm testing it first with a wrong password 496 00:27:15,500 --> 00:27:17,290 and here we go. 497 00:27:17,290 --> 00:27:21,400 So incorrect email or password right in our nice alert 498 00:27:21,400 --> 00:27:24,400 and you saw that after five seconds it disappeared. 499 00:27:24,400 --> 00:27:26,160 Of course we could have put some 500 00:27:26,160 --> 00:27:28,400 nice animation there and everything, 501 00:27:28,400 --> 00:27:31,830 but I think like this it's already more than enough. 502 00:27:31,830 --> 00:27:33,950 So let's see that again just quickly, 503 00:27:33,950 --> 00:27:36,113 and so that's what it's going to look like, 504 00:27:37,600 --> 00:27:40,400 but when it's correct then of course it should be green. 505 00:27:42,030 --> 00:27:44,930 So yeah, logged in successfully 506 00:27:44,930 --> 00:27:47,890 and we see a reload after one and a half seconds 507 00:27:47,890 --> 00:27:50,320 and so now it really is working. 508 00:27:50,320 --> 00:27:53,593 That's our complete authentication on the front-end. 509 00:27:54,880 --> 00:27:59,430 That was a lot of work, but if you ask me totally worth it. 510 00:27:59,430 --> 00:28:02,070 Now the only thing that's missing is 511 00:28:02,070 --> 00:28:05,690 us actually logging out when we click this button here. 512 00:28:05,690 --> 00:28:07,510 So right now that's not the case 513 00:28:07,510 --> 00:28:10,133 and so in the next video let's fix that. 38225

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