All language subtitles for 002 Debugging Node.js with ndb_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,120 --> 00:00:02,420 In this video, we're gonna learn 2 00:00:02,420 --> 00:00:06,120 about debugging Node.JS because, let's face it, 3 00:00:06,120 --> 00:00:09,240 there will always be some bugs in our code no matter 4 00:00:09,240 --> 00:00:11,040 how careful we are. 5 00:00:11,040 --> 00:00:13,910 And so it's good to have a tool to help us 6 00:00:13,910 --> 00:00:15,740 with debugging our code. 7 00:00:15,740 --> 00:00:18,870 Now this is not really about error handling with Express, 8 00:00:18,870 --> 00:00:21,200 but I thought this was a good point in the course 9 00:00:21,200 --> 00:00:23,510 to introduce you to a debugging tool 10 00:00:23,510 --> 00:00:26,423 which we might then use throughout the rest of the course. 11 00:00:27,920 --> 00:00:31,270 And there are different ways of debugging Node.JS code. 12 00:00:31,270 --> 00:00:33,740 For example, we could use VS code for that. 13 00:00:33,740 --> 00:00:38,190 But, actually, Google very recently released an amazing tool 14 00:00:38,190 --> 00:00:42,840 which we can use to debug which is called NDB, all right? 15 00:00:42,840 --> 00:00:46,610 So let's move over to our other terminal here 16 00:00:46,610 --> 00:00:48,850 and then install NDB. 17 00:00:48,850 --> 00:00:51,720 And NDB, which stands for Node debugger, 18 00:00:51,720 --> 00:00:53,823 is actually just an NPM package. 19 00:00:54,780 --> 00:00:56,927 So NPM install NDB. 20 00:00:58,440 --> 00:01:00,250 All right, and you should then install it 21 00:01:00,250 --> 00:01:04,120 as a global package, all right? 22 00:01:04,120 --> 00:01:07,563 And if you're on a Mac, you might need global permissions. 23 00:01:08,440 --> 00:01:10,890 So just write sudo here in front. 24 00:01:10,890 --> 00:01:14,720 Or if you're not at all able to install it globally, 25 00:01:14,720 --> 00:01:17,610 you can always just install it locally 26 00:01:17,610 --> 00:01:19,003 as a death dependency. 27 00:01:20,040 --> 00:01:22,420 So just like this, all right? 28 00:01:22,420 --> 00:01:25,000 Anyway, please go ahead and install this tool now. 29 00:01:25,000 --> 00:01:25,870 I'm not going to do it 30 00:01:25,870 --> 00:01:28,590 because it can be quite a heavy download, and 31 00:01:28,590 --> 00:01:30,630 that takes a bit too long now. 32 00:01:30,630 --> 00:01:33,720 Anyway, as soon as you have the tool installed, 33 00:01:33,720 --> 00:01:36,130 then let's head over to package.jason 34 00:01:36,130 --> 00:01:39,710 and add a new script here, all right? 35 00:01:39,710 --> 00:01:42,173 And I'm gonna call that one debug. 36 00:01:43,770 --> 00:01:44,900 Okay? 37 00:01:44,900 --> 00:01:47,270 And so the command that we want to run here 38 00:01:47,270 --> 00:01:50,890 is simply NDB, so the note debugger 39 00:01:50,890 --> 00:01:53,250 and then again our entry point, 40 00:01:53,250 --> 00:01:56,270 So, server.js 41 00:01:56,270 --> 00:01:57,103 Okay? 42 00:01:57,103 --> 00:01:59,200 And now this is gonna work no matter if you installed 43 00:01:59,200 --> 00:02:01,320 NDB locally or globally. 44 00:02:01,320 --> 00:02:03,537 All right, so let's now run the script. 45 00:02:03,537 --> 00:02:05,260 And in order for this to work 46 00:02:05,260 --> 00:02:07,690 we actually need to finish this process 47 00:02:07,690 --> 00:02:09,460 because it's basically gonna start 48 00:02:09,460 --> 00:02:12,210 the server as well and so it will then 49 00:02:12,210 --> 00:02:14,120 try to do it on the same port 50 00:02:14,120 --> 00:02:15,980 and that's of course not gonna work. 51 00:02:15,980 --> 00:02:18,450 So we need to finish the one that's currently running 52 00:02:18,450 --> 00:02:21,670 and then from here we can run NPM 53 00:02:21,670 --> 00:02:22,503 run 54 00:02:23,690 --> 00:02:24,523 debug 55 00:02:24,523 --> 00:02:26,370 All right, and so now 56 00:02:26,370 --> 00:02:28,230 a new Chrome window should open 57 00:02:29,070 --> 00:02:31,220 so what's called a headless Chrome, 58 00:02:31,220 --> 00:02:32,690 but it's not a real Chrome. 59 00:02:32,690 --> 00:02:34,890 So you will see the Chrome icon down here 60 00:02:34,890 --> 00:02:36,550 and also here in the menu bar 61 00:02:36,550 --> 00:02:39,410 but really this is just the note debugger. 62 00:02:39,410 --> 00:02:41,260 So what do we have here? 63 00:02:41,260 --> 00:02:45,030 Well on the left side, we have our complete file system. 64 00:02:45,030 --> 00:02:48,010 We also have access to our NPM scripts here 65 00:02:48,010 --> 00:02:50,810 which we can actually run from here. 66 00:02:50,810 --> 00:02:52,910 We also have a console 67 00:02:52,910 --> 00:02:55,610 and so here we have our usual outputs with the app running 68 00:02:55,610 --> 00:02:57,310 and the database connection 69 00:02:58,570 --> 00:03:01,330 and we also have the performance and memory tabs, 70 00:03:01,330 --> 00:03:03,090 which we're not gonna use. 71 00:03:03,090 --> 00:03:05,170 All right, now if you're familiar 72 00:03:05,170 --> 00:03:07,130 with the general debugging process 73 00:03:07,130 --> 00:03:10,100 then all of this gonna be kinda familiar to you. 74 00:03:10,100 --> 00:03:12,260 All right, but if not don't worry 75 00:03:12,260 --> 00:03:13,810 I will show you a couple of techniques 76 00:03:13,810 --> 00:03:15,240 throughout this video. 77 00:03:15,240 --> 00:03:19,560 All right, anyway let's now open up our server.js. 78 00:03:19,560 --> 00:03:21,460 And one thing that's really amazing 79 00:03:21,460 --> 00:03:24,500 is that we can actually edit our files in here, 80 00:03:24,500 --> 00:03:26,040 so right in this debugger. 81 00:03:26,040 --> 00:03:28,530 So, for example let's say that we find a bug 82 00:03:28,530 --> 00:03:30,820 and we then want to fix it right away. 83 00:03:30,820 --> 00:03:33,340 We can do that right here in the debugger 84 00:03:33,340 --> 00:03:35,790 and it will then update the original code. 85 00:03:35,790 --> 00:03:37,020 So just to test it, 86 00:03:37,020 --> 00:03:38,943 let's just add a comment down here. 87 00:03:40,050 --> 00:03:44,460 So, test then hit command or control s to save 88 00:03:44,460 --> 00:03:46,570 and then when we go back to our code 89 00:03:47,830 --> 00:03:49,800 and open up server.js 90 00:03:49,800 --> 00:03:53,060 there you will see that the comment is actually here. 91 00:03:53,060 --> 00:03:53,950 Okay? 92 00:03:53,950 --> 00:03:55,810 And if we now delete it from here, 93 00:03:55,810 --> 00:03:57,370 give it a save, 94 00:03:57,370 --> 00:03:59,220 and back to the debugger, 95 00:03:59,220 --> 00:04:02,300 then it is gonna be gone from here as well. 96 00:04:02,300 --> 00:04:04,810 Okay, but now about the debugging itself. 97 00:04:04,810 --> 00:04:06,860 I would say that the fundamental aspect 98 00:04:06,860 --> 00:04:09,740 of the debugging is to set break points. 99 00:04:09,740 --> 00:04:12,420 So break points are basically points in our code 100 00:04:12,420 --> 00:04:14,540 that we can define here in the debugger, 101 00:04:14,540 --> 00:04:16,810 where our code will then stop running. 102 00:04:16,810 --> 00:04:18,810 It will basically freeze in time 103 00:04:18,810 --> 00:04:21,899 and we can then take a look at all our variables. 104 00:04:21,899 --> 00:04:24,530 Okay, so that will then be extremely useful 105 00:04:24,530 --> 00:04:26,270 to find some bugs. 106 00:04:26,270 --> 00:04:28,340 Now, right now there's not any bug in here, 107 00:04:28,340 --> 00:04:30,860 but let's still add a break point. 108 00:04:30,860 --> 00:04:34,850 And I'm going to add that break point here in this line 21. 109 00:04:34,850 --> 00:04:36,610 So I click here on this line 110 00:04:36,610 --> 00:04:38,920 and then you see this green marker, okay? 111 00:04:38,920 --> 00:04:41,600 And so that means that the code will stop at this point 112 00:04:41,600 --> 00:04:43,950 when we execute it, okay? 113 00:04:43,950 --> 00:04:45,750 And you actually can see it here on the right side 114 00:04:45,750 --> 00:04:48,850 on the break points tab here as well. 115 00:04:48,850 --> 00:04:50,680 Now, our application is actually 116 00:04:50,680 --> 00:04:52,360 already running at this point 117 00:04:52,360 --> 00:04:55,350 and basically waiting requests to come in. 118 00:04:55,350 --> 00:04:56,830 And so what we need to do here 119 00:04:56,830 --> 00:05:00,810 is to right click and then click on run this script. 120 00:05:00,810 --> 00:05:02,670 Okay, and so that will then basically 121 00:05:02,670 --> 00:05:04,153 run the script here again. 122 00:05:05,638 --> 00:05:06,720 All right? 123 00:05:06,720 --> 00:05:08,390 And so here we go. 124 00:05:08,390 --> 00:05:10,380 So you see here on the right side, 125 00:05:10,380 --> 00:05:12,940 that that it says paused on break point 126 00:05:12,940 --> 00:05:16,040 and so all the code that is above this break point here 127 00:05:16,040 --> 00:05:18,330 has already executed at this point. 128 00:05:18,330 --> 00:05:21,390 And so we can now take a look at the variables. 129 00:05:21,390 --> 00:05:24,230 For example, we can hover this port variable 130 00:05:24,230 --> 00:05:27,220 and we see that it's set to 3,000. 131 00:05:27,220 --> 00:05:29,670 And also actually hit this place here 132 00:05:29,670 --> 00:05:31,560 in the code here, all right. 133 00:05:31,560 --> 00:05:33,830 And then the third way of seeing it 134 00:05:33,830 --> 00:05:35,380 is here on the right side. 135 00:05:35,380 --> 00:05:38,280 So we have a couple of basically tabs here 136 00:05:38,280 --> 00:05:40,940 so node processes, the watch, the call stack, 137 00:05:40,940 --> 00:05:43,240 which is not really important for now. 138 00:05:43,240 --> 00:05:46,940 The scope, and so the scope is where all our 139 00:05:46,940 --> 00:05:49,050 variables are, okay? 140 00:05:49,050 --> 00:05:52,530 And so here again, you have the port set to 3,000. 141 00:05:52,530 --> 00:05:54,620 Okay, and here you also can see 142 00:05:54,620 --> 00:05:57,010 the five variables that we have access to 143 00:05:57,010 --> 00:05:58,490 in all modules. 144 00:05:58,490 --> 00:06:01,290 Remember that from the models lecture? 145 00:06:01,290 --> 00:06:03,590 So we have the directory name, 146 00:06:03,590 --> 00:06:07,250 we have the file name, we have the require function, 147 00:06:07,250 --> 00:06:10,150 we have module, and we have export. 148 00:06:10,150 --> 00:06:12,690 So remember, these are the five variables 149 00:06:12,690 --> 00:06:15,400 that are available in each and every module. 150 00:06:15,400 --> 00:06:17,960 And actually when we execute a code like this 151 00:06:17,960 --> 00:06:21,730 in the debugger, we can see that our entire code 152 00:06:21,730 --> 00:06:24,383 is in fact wrapped into this function. 153 00:06:25,390 --> 00:06:26,560 Right? 154 00:06:26,560 --> 00:06:28,810 So this wrapper function that gives us access 155 00:06:28,810 --> 00:06:31,230 to these five variables. 156 00:06:31,230 --> 00:06:34,710 All right, next I also want to take a look at 157 00:06:34,710 --> 00:06:38,013 our app variable, so basically the Express application 158 00:06:38,013 --> 00:06:42,330 that we export from app.js, remember that. 159 00:06:42,330 --> 00:06:44,870 And here is really a ton of stuff 160 00:06:44,870 --> 00:06:47,330 but what I find interesting 161 00:06:47,330 --> 00:06:50,393 is to take a look at this router here. 162 00:06:51,660 --> 00:06:54,763 Okay, and so in router we then have stack. 163 00:06:56,680 --> 00:06:59,100 Okay, and so let's open this up a little bit 164 00:07:00,240 --> 00:07:02,070 and so this stack here is basically 165 00:07:02,070 --> 00:07:05,420 the middleware stack that we have in our application. 166 00:07:05,420 --> 00:07:09,010 Okay, for example we have our jsonParser here, 167 00:07:09,010 --> 00:07:13,030 we have the code that serves the static files. 168 00:07:13,030 --> 00:07:16,760 Take a look at that here in app.js 169 00:07:16,760 --> 00:07:19,170 so this express.static. 170 00:07:19,170 --> 00:07:21,380 We also have the logger here 171 00:07:21,380 --> 00:07:23,910 which comes here from using Morgan. 172 00:07:23,910 --> 00:07:26,310 Then you have these next two middleware functions, 173 00:07:26,310 --> 00:07:27,480 so these two here, 174 00:07:27,480 --> 00:07:31,590 which are anonymous, so this one and this one 175 00:07:31,590 --> 00:07:33,740 and maybe we can take a look at them. 176 00:07:33,740 --> 00:07:35,803 But not really. 177 00:07:36,640 --> 00:07:38,390 Okay, it doesn't matter. 178 00:07:38,390 --> 00:07:40,740 So this is really just for curiosity 179 00:07:40,740 --> 00:07:42,170 and showing you that we actually 180 00:07:42,170 --> 00:07:45,520 can take a look at our middleware stack, okay? 181 00:07:45,520 --> 00:07:47,603 Then finally we have our two routers. 182 00:07:48,795 --> 00:07:49,970 Okay? 183 00:07:49,970 --> 00:07:53,080 So, we have the router, and you see here actually 184 00:07:53,080 --> 00:07:55,160 the route for which it applies. 185 00:07:55,160 --> 00:08:00,160 So api/v1/tours right and so I find this really interesting. 186 00:08:00,980 --> 00:08:03,710 Of course we still have the users here as well. 187 00:08:03,710 --> 00:08:07,250 And so with this really can take a look at how the 188 00:08:07,250 --> 00:08:09,823 Express application works behind the scenes. 189 00:08:10,710 --> 00:08:11,543 Okay? 190 00:08:12,380 --> 00:08:14,623 So let's close up all of this. 191 00:08:16,140 --> 00:08:18,440 And the other thing that I wanted to show you 192 00:08:18,440 --> 00:08:20,210 is here in the global variables 193 00:08:21,120 --> 00:08:24,300 because here we have the process variable 194 00:08:25,850 --> 00:08:28,453 or at least we should have it somewhere here. 195 00:08:30,700 --> 00:08:32,909 Yeah, so indeed here it is. 196 00:08:32,909 --> 00:08:35,140 So here we have the process variable 197 00:08:35,140 --> 00:08:37,400 that is remember, available everywhere. 198 00:08:37,400 --> 00:08:41,070 And so that's why it's called here a global variable. 199 00:08:41,070 --> 00:08:43,309 Then in there we have process.env 200 00:08:44,300 --> 00:08:46,030 and to remember that this where 201 00:08:46,030 --> 00:08:49,250 all our environment variables are stored. 202 00:08:49,250 --> 00:08:52,180 And so indeed here we have our database string, 203 00:08:52,180 --> 00:08:55,340 we have the local database, the password, 204 00:08:55,340 --> 00:08:57,910 and really all the other environment variables 205 00:08:57,910 --> 00:09:01,333 that we defined in our config.n file. 206 00:09:02,630 --> 00:09:03,740 All right? 207 00:09:03,740 --> 00:09:07,070 So really interesting stuff that we can take a look at here. 208 00:09:07,070 --> 00:09:10,260 But now let's continue with our debugging. 209 00:09:10,260 --> 00:09:11,093 Okay? 210 00:09:11,093 --> 00:09:13,540 So we stopped the code, we froze it in time 211 00:09:13,540 --> 00:09:16,630 here at this point, so at line 21. 212 00:09:16,630 --> 00:09:19,720 Okay, and so now we can click here on this button, 213 00:09:19,720 --> 00:09:22,400 in order to actually continue to running the code. 214 00:09:22,400 --> 00:09:24,210 And since we have no more break points, 215 00:09:24,210 --> 00:09:26,070 the code will then break no more, 216 00:09:26,070 --> 00:09:28,500 and basically finish running. 217 00:09:28,500 --> 00:09:29,980 So let's do that. 218 00:09:29,980 --> 00:09:32,910 And so now our application is really running. 219 00:09:32,910 --> 00:09:33,830 Let's take a look at that. 220 00:09:33,830 --> 00:09:36,600 In Console, okay? 221 00:09:36,600 --> 00:09:38,720 So app running on port 3,000 222 00:09:38,720 --> 00:09:40,793 and DB connection successful, of course. 223 00:09:43,550 --> 00:09:44,793 What's happened here? 224 00:09:46,120 --> 00:09:47,350 Now, all right, 225 00:09:47,350 --> 00:09:50,163 so let's now quickly do a request here. 226 00:09:51,580 --> 00:09:53,650 So simply one for /tours 227 00:09:55,532 --> 00:09:57,100 and now we have all this junk here 228 00:09:57,100 --> 00:09:59,683 and I'm gonna take care of that in a second. 229 00:10:01,050 --> 00:10:04,110 All right, and if you now come back to our Console here 230 00:10:04,110 --> 00:10:07,670 then of course we have all the code that we had before. 231 00:10:07,670 --> 00:10:09,220 Hello from the middleware and then 232 00:10:09,220 --> 00:10:12,120 how the long query actually took. 233 00:10:12,120 --> 00:10:14,890 All right, and now before we do anything else 234 00:10:14,890 --> 00:10:17,693 let's actually get rid of these junk tours. 235 00:10:19,380 --> 00:10:20,893 So I'm gonna reload it here, 236 00:10:22,270 --> 00:10:24,720 and I guess it will be somewhere here at the end. 237 00:10:26,720 --> 00:10:29,103 So, test whatever here. 238 00:10:29,980 --> 00:10:31,593 So let's get rid of it. 239 00:10:32,490 --> 00:10:35,573 This is the secret tour and I actually want to keep it here. 240 00:10:37,480 --> 00:10:40,413 But everything from here on we no longer want. 241 00:10:44,720 --> 00:10:45,830 And so 242 00:10:48,150 --> 00:10:51,490 so yeah, so now we're back to having just 10 tours, 243 00:10:51,490 --> 00:10:53,480 just as before. 244 00:10:53,480 --> 00:10:55,860 Anyway let's now actually set a break point 245 00:10:55,860 --> 00:10:58,203 in the function that handles this route. 246 00:10:59,060 --> 00:11:02,150 Okay, and so we come to our controllers folder 247 00:11:02,150 --> 00:11:04,540 and there we have the tour controller. 248 00:11:04,540 --> 00:11:05,373 Okay? 249 00:11:05,373 --> 00:11:08,200 And then the handler function is this get all tours. 250 00:11:08,200 --> 00:11:09,760 So for now all I wanted to do 251 00:11:09,760 --> 00:11:11,960 is to just set a break point here 252 00:11:11,960 --> 00:11:15,010 so that we can take a look at what these variables 253 00:11:15,010 --> 00:11:17,710 look like after the query is already done. 254 00:11:17,710 --> 00:11:20,430 So this code here will get our tours 255 00:11:20,430 --> 00:11:21,900 and we will then stop the code 256 00:11:21,900 --> 00:11:25,210 basically before actually sending it as a response. 257 00:11:25,210 --> 00:11:29,790 Okay, and so all we need to do is to actually do the request 258 00:11:29,790 --> 00:11:32,730 because that will then trigger that function. 259 00:11:32,730 --> 00:11:33,600 Right? 260 00:11:33,600 --> 00:11:36,550 And so since we have a break point, we automatically move 261 00:11:36,550 --> 00:11:39,440 back to this window here, and to the point 262 00:11:39,440 --> 00:11:41,270 where the code has stopped. 263 00:11:41,270 --> 00:11:43,713 So, what kind of variables do we have here? 264 00:11:44,830 --> 00:11:47,690 So you see that we have the request and a response, 265 00:11:47,690 --> 00:11:49,630 and we also have the features variable, 266 00:11:49,630 --> 00:11:51,670 and the tours, of course. 267 00:11:51,670 --> 00:11:53,770 So let's first take a look at the request. 268 00:11:54,740 --> 00:11:57,500 And here again, you see that we have all kinds 269 00:11:57,500 --> 00:11:58,560 of stuff really. 270 00:11:58,560 --> 00:12:02,470 So we have, baseurl, we have the method, 271 00:12:02,470 --> 00:12:05,150 we have for example, request.query, 272 00:12:05,150 --> 00:12:07,280 which right now is empty because we didn't pass 273 00:12:07,280 --> 00:12:08,560 any query string, 274 00:12:08,560 --> 00:12:11,170 but you see that it's really already here. 275 00:12:11,170 --> 00:12:13,730 Okay, and so you start seeing now how handy 276 00:12:13,730 --> 00:12:16,810 this can be in order to debug our code. 277 00:12:16,810 --> 00:12:20,060 So basically to freeze our code in time instead of 278 00:12:20,060 --> 00:12:23,620 having to do all these console.logs that we used to do 279 00:12:23,620 --> 00:12:25,040 up until this point. 280 00:12:25,040 --> 00:12:27,770 So usually when we wanted to take a look at 281 00:12:27,770 --> 00:12:31,010 the query for example, we would do a bunch of console.logs 282 00:12:31,010 --> 00:12:34,590 and use that to figure out a bug in case that something 283 00:12:34,590 --> 00:12:35,950 was not working. 284 00:12:35,950 --> 00:12:38,150 Right, but now we have this amazing tool 285 00:12:38,150 --> 00:12:41,130 which can help us avoid all these console.logs 286 00:12:41,130 --> 00:12:42,460 for example. 287 00:12:42,460 --> 00:12:44,530 Then we also have the response of course. 288 00:12:44,530 --> 00:12:48,460 And again you see all of these properties and methods 289 00:12:48,460 --> 00:12:50,890 that are on there, and they are not really interesting 290 00:12:50,890 --> 00:12:51,990 for us now. 291 00:12:51,990 --> 00:12:54,900 What I wanted to show you is of course at this point 292 00:12:54,900 --> 00:12:57,520 we already have the tours, okay? 293 00:12:57,520 --> 00:13:02,450 So we have nine tours, so let's take a look at them. 294 00:13:02,450 --> 00:13:06,000 And it looks kind of weird here, so in order to get access 295 00:13:06,000 --> 00:13:10,480 to the actual values, we need to click here, okay, 296 00:13:10,480 --> 00:13:11,880 so that's a bit weird. 297 00:13:11,880 --> 00:13:14,037 But it works of course. 298 00:13:14,037 --> 00:13:18,110 And so you see that in fact our tours are already here 299 00:13:18,110 --> 00:13:21,093 and of course the features as well. 300 00:13:21,930 --> 00:13:24,650 So you see here that the features are an instance of 301 00:13:24,650 --> 00:13:27,670 the API features class just as we defined it. 302 00:13:27,670 --> 00:13:31,130 And in there we have the query and the query string. 303 00:13:31,130 --> 00:13:34,660 Great, so this is how we take a look at all the variables. 304 00:13:34,660 --> 00:13:37,087 And this is how the most important parts of 305 00:13:37,087 --> 00:13:38,680 the debugger work. 306 00:13:38,680 --> 00:13:41,750 Now in order to learn a bit about the debugging process 307 00:13:41,750 --> 00:13:45,400 itself, let's introduce a very small bug into our code, 308 00:13:45,400 --> 00:13:48,300 and then take a look at how we can use these tools 309 00:13:48,300 --> 00:13:51,280 that we have here to basically take a deeper look 310 00:13:51,280 --> 00:13:52,790 at our code. 311 00:13:52,790 --> 00:13:55,410 So I'm not gonna resume the skipped execution 312 00:13:55,410 --> 00:13:59,850 in order to run basically the rest of the code, okay? 313 00:13:59,850 --> 00:14:01,270 So that should be done now. 314 00:14:01,270 --> 00:14:03,670 So now here we have all response. 315 00:14:03,670 --> 00:14:06,320 So you see that it took all this time here, 316 00:14:06,320 --> 00:14:08,970 so three minutes and 29 seconds, 317 00:14:08,970 --> 00:14:11,410 but that's just because we paused the execution 318 00:14:11,410 --> 00:14:12,313 for so long. 319 00:14:14,130 --> 00:14:15,130 Okay. 320 00:14:15,130 --> 00:14:17,793 Now let's come to our code here. 321 00:14:19,160 --> 00:14:21,853 Let's close what we no longer need. 322 00:14:23,810 --> 00:14:28,410 So actually in our API features file, 323 00:14:28,410 --> 00:14:32,603 I want to introduce a small bug here in the limit fields. 324 00:14:33,570 --> 00:14:36,080 So let's say that we were trying to implement 325 00:14:36,080 --> 00:14:39,340 this method here, but instead of joining with a space here, 326 00:14:39,340 --> 00:14:41,790 we forgot to put it here. 327 00:14:41,790 --> 00:14:45,030 And so let's just say that we joined without any space, 328 00:14:45,030 --> 00:14:49,010 and so this would then give us a weird result, right? 329 00:14:49,010 --> 00:14:50,633 So let's actually test it out. 330 00:14:52,650 --> 00:14:54,480 So let's say 331 00:14:56,350 --> 00:14:59,690 fields and that we wanted only the name 332 00:14:59,690 --> 00:15:04,050 and the duration, right? 333 00:15:04,050 --> 00:15:07,400 Now before I can actually send that request, 334 00:15:07,400 --> 00:15:09,050 let's remove the breakpoint here. 335 00:15:10,650 --> 00:15:11,483 Okay? 336 00:15:11,483 --> 00:15:14,410 Sent the request, and now we actually do not get 337 00:15:14,410 --> 00:15:16,073 the name and the duration. 338 00:15:16,920 --> 00:15:19,410 So let's pretend that is our bug now 339 00:15:19,410 --> 00:15:23,510 and we're now trying to figure out why this is not working. 340 00:15:23,510 --> 00:15:24,520 Okay? 341 00:15:24,520 --> 00:15:26,490 So let's go to our debugger. 342 00:15:26,490 --> 00:15:28,470 And we know that the error must probably be 343 00:15:28,470 --> 00:15:31,053 somewhere in our limit fields method. 344 00:15:32,090 --> 00:15:35,530 And so let's basically stop the code from executing 345 00:15:35,530 --> 00:15:37,320 at this point, okay? 346 00:15:37,320 --> 00:15:40,880 Because this is where this method will actually be called 347 00:15:40,880 --> 00:15:43,927 and so from here we can enter that function 348 00:15:43,927 --> 00:15:45,130 for that method. 349 00:15:45,130 --> 00:15:46,100 Okay? 350 00:15:46,100 --> 00:15:48,883 So then let's fire off that request now, 351 00:15:50,240 --> 00:15:54,240 and so now we go back to our debugger automatically. 352 00:15:54,240 --> 00:15:57,250 So at this point this line and this line and this line 353 00:15:57,250 --> 00:16:00,880 of code have already executed, and so let's now use 354 00:16:00,880 --> 00:16:02,980 the step tool, okay? 355 00:16:02,980 --> 00:16:05,770 What step will do is that it will basically execute 356 00:16:05,770 --> 00:16:07,430 the next line of code. 357 00:16:07,430 --> 00:16:09,810 And in this case that will be inside of 358 00:16:09,810 --> 00:16:11,790 the limit fields method. 359 00:16:11,790 --> 00:16:16,143 So step, and it will then move right into that function. 360 00:16:17,000 --> 00:16:20,670 Okay so let's take a look at what we have here. 361 00:16:20,670 --> 00:16:24,070 For example this .query string is name comma duration, 362 00:16:24,070 --> 00:16:26,083 so that is correct, right? 363 00:16:26,990 --> 00:16:30,520 Okay so let's step to the next line. 364 00:16:30,520 --> 00:16:33,600 All right and so this is where this operation 365 00:16:33,600 --> 00:16:35,263 is actually happening. 366 00:16:36,440 --> 00:16:38,460 Then next up. 367 00:16:38,460 --> 00:16:40,823 Let's take a look at our variables here. 368 00:16:42,500 --> 00:16:47,090 And so here we now see field, and so here we have our bug. 369 00:16:47,090 --> 00:16:47,930 Okay? 370 00:16:47,930 --> 00:16:50,810 So the problem is, of course, that we have no space 371 00:16:50,810 --> 00:16:53,170 between name and duration. 372 00:16:53,170 --> 00:16:54,830 And so that's why it's not working. 373 00:16:54,830 --> 00:16:58,410 So fields is of course defined here, and so like this 374 00:16:58,410 --> 00:17:02,500 we can find our bug and correct it right away. 375 00:17:02,500 --> 00:17:04,940 So remember that the added step we do here 376 00:17:04,940 --> 00:17:07,780 are reflected immediately in the code. 377 00:17:07,780 --> 00:17:08,823 So give it a save, 378 00:17:09,700 --> 00:17:12,560 and then it will do it again. 379 00:17:12,560 --> 00:17:14,233 So I can keep stepping. 380 00:17:15,140 --> 00:17:17,270 And so now fields is correct. 381 00:17:17,270 --> 00:17:19,193 So name space duration. 382 00:17:20,780 --> 00:17:22,670 Then the next line of code. 383 00:17:22,670 --> 00:17:26,329 And now we enter into the select method on the query. 384 00:17:26,329 --> 00:17:28,420 But we're not interested in that at all, 385 00:17:28,420 --> 00:17:31,710 so we can say "step out of current function." 386 00:17:31,710 --> 00:17:32,543 Okay? 387 00:17:32,543 --> 00:17:35,730 So that select that we just thought was running 388 00:17:35,730 --> 00:17:37,880 this function here, okay? 389 00:17:37,880 --> 00:17:40,150 But of course we were not interested in that 390 00:17:40,150 --> 00:17:43,080 so we just quit it and moved on to the next line. 391 00:17:43,080 --> 00:17:44,950 So now we have return this, 392 00:17:44,950 --> 00:17:48,330 next line, and again. 393 00:17:48,330 --> 00:17:51,373 So now we're back to where we were but in the next line. 394 00:17:52,590 --> 00:17:53,840 So let's keep doing that. 395 00:17:55,040 --> 00:17:56,750 So now we're into page eight, 396 00:17:56,750 --> 00:17:59,060 but we're not really interested in this one, 397 00:17:59,060 --> 00:18:01,660 and so let's again step out of the current function. 398 00:18:02,950 --> 00:18:05,190 And now we're here at the tours definition. 399 00:18:05,190 --> 00:18:07,840 Which at this point is not yet done. 400 00:18:07,840 --> 00:18:10,610 And so let's again say step. 401 00:18:10,610 --> 00:18:14,070 And so now at this point our tours should be defined. 402 00:18:14,070 --> 00:18:17,950 All right so we have our nine tours over here. 403 00:18:17,950 --> 00:18:19,250 Let's take a look at them, 404 00:18:20,590 --> 00:18:21,810 and here they are. 405 00:18:21,810 --> 00:18:23,670 And actually they have all the data, 406 00:18:23,670 --> 00:18:26,880 so not just the one we defined but in fact, 407 00:18:26,880 --> 00:18:28,560 actually it doesn't. 408 00:18:28,560 --> 00:18:32,220 So we really only have the name and duration, 409 00:18:32,220 --> 00:18:35,490 so duration, name, and all the other ones 410 00:18:35,490 --> 00:18:36,980 are undefined. 411 00:18:36,980 --> 00:18:40,010 So that's just because we limited a query to only 412 00:18:40,010 --> 00:18:41,603 these two fields, remember? 413 00:18:42,500 --> 00:18:45,350 Now what I also wanted to show you is here in the features, 414 00:18:45,350 --> 00:18:49,370 we can take a look at our query and here we have 415 00:18:49,370 --> 00:18:52,240 the fields property for example where we see duration 416 00:18:52,240 --> 00:18:54,780 set to one and name set to one. 417 00:18:54,780 --> 00:18:58,300 And so that's exactly the two names that we selected. 418 00:18:58,300 --> 00:19:00,420 We also have these options here, 419 00:19:00,420 --> 00:19:05,420 which is at this point set to create it minus one. 420 00:19:05,690 --> 00:19:07,393 And so that's coming from here. 421 00:19:08,560 --> 00:19:10,500 So this here. 422 00:19:10,500 --> 00:19:13,360 So basically what this method here, this sort method 423 00:19:13,360 --> 00:19:17,350 is gonna do is that it will add this sort property here 424 00:19:17,350 --> 00:19:18,860 to these options, all right? 425 00:19:18,860 --> 00:19:22,110 And then we also have limit and skip which of course 426 00:19:22,110 --> 00:19:23,763 come here from page eight. 427 00:19:25,690 --> 00:19:26,523 Okay? 428 00:19:26,523 --> 00:19:29,160 So I thought that this also kind of interesting 429 00:19:29,160 --> 00:19:33,880 and yeah, so our code is now actually fixed and let's keep 430 00:19:33,880 --> 00:19:34,713 running this. 431 00:19:35,550 --> 00:19:38,630 And so we now should have our correct result. 432 00:19:38,630 --> 00:19:41,510 Now here it says we could not get any response, 433 00:19:41,510 --> 00:19:44,593 and that's because we took too long fixing our code. 434 00:19:45,490 --> 00:19:47,280 So we got an error connecting. 435 00:19:47,280 --> 00:19:48,693 But if we now send it again, 436 00:19:49,530 --> 00:19:51,050 and now we do it quicker. 437 00:19:51,050 --> 00:19:53,650 Or actually we could remove our breakpoint entirely. 438 00:19:55,280 --> 00:19:56,780 So let's keep it running, 439 00:19:56,780 --> 00:19:59,570 let's go back and now indeed we get the duration 440 00:19:59,570 --> 00:20:01,570 and the name as well. 441 00:20:01,570 --> 00:20:04,260 So that's because we just fixed our code 442 00:20:04,260 --> 00:20:06,550 using the NDB debugger. 443 00:20:06,550 --> 00:20:07,990 So great. 444 00:20:07,990 --> 00:20:10,840 That's a really amazing and helpful tool 445 00:20:10,840 --> 00:20:13,260 that we're gonna keep using throughout the rest 446 00:20:13,260 --> 00:20:14,220 of the course. 447 00:20:14,220 --> 00:20:17,530 Maybe not always, sometimes it's quicker to just 448 00:20:17,530 --> 00:20:19,540 throw in a console out log. 449 00:20:19,540 --> 00:20:22,350 But really, in some more complicated cases, 450 00:20:22,350 --> 00:20:24,253 I like to use this kind of tool. 34392

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