1 00:00:01,270 --> 00:00:04,520 Now before diving into some NodeJS code, 2 00:00:04,520 --> 00:00:06,700 let's do a high level overview 3 00:00:06,700 --> 00:00:08,990 of what NodeJS actually is, 4 00:00:08,990 --> 00:00:11,800 what we use it for and why we use Node 5 00:00:11,800 --> 00:00:13,843 instead of other technologies. 6 00:00:15,410 --> 00:00:17,570 So, the official definition is that 7 00:00:17,570 --> 00:00:19,480 NodeJS is a JavaScript Runtime 8 00:00:19,480 --> 00:00:23,783 built on Google's open-source V8 JavaScript engine. 9 00:00:23,783 --> 00:00:26,279 Now, what does that actually mean? 10 00:00:26,279 --> 00:00:29,289 Well, let's start by trying to understand 11 00:00:29,289 --> 00:00:31,174 what the JavaScript Runtime 12 00:00:31,174 --> 00:00:33,913 and the V8 engine actually are. 13 00:00:35,190 --> 00:00:37,914 So, you have probably already used JavaScript before 14 00:00:37,914 --> 00:00:42,120 and it was probably always just inside a browser, right? 15 00:00:42,120 --> 00:00:45,400 Because any browser natively understands 16 00:00:45,400 --> 00:00:49,250 HTML, CSS, and JavaScript and no matter 17 00:00:49,250 --> 00:00:51,760 if you write vanilla JavaScript or some 18 00:00:51,760 --> 00:00:54,713 JavaScript framework like React or Angular code, 19 00:00:54,713 --> 00:00:56,370 that's all just JavaScript 20 00:00:56,370 --> 00:00:59,920 that gets executed right in the browser. 21 00:00:59,920 --> 00:01:01,500 So, in this case, the browser 22 00:01:01,500 --> 00:01:03,454 is then the JavaScript Runtime. 23 00:01:03,454 --> 00:01:06,110 But, what if we could take JavaScript 24 00:01:06,110 --> 00:01:08,311 out of the browser and simply execute 25 00:01:08,311 --> 00:01:10,988 or JavaScript code somewhere else without 26 00:01:10,988 --> 00:01:14,860 all the restrictions that we have in the browser? 27 00:01:14,860 --> 00:01:17,580 Well, it turns out that we actually can. 28 00:01:17,580 --> 00:01:19,955 And the solution for this, as you can guess, 29 00:01:19,955 --> 00:01:23,425 is called NodeJS and so Node JS 30 00:01:23,425 --> 00:01:25,830 is just another JavaScript Runtime. 31 00:01:25,830 --> 00:01:29,252 It's just like a container, like an environment, 32 00:01:29,252 --> 00:01:32,010 in which a program written in JavaScript 33 00:01:32,010 --> 00:01:37,010 can be executed, but outside of any browser whatsoever. 34 00:01:37,230 --> 00:01:39,850 All right, it's actually a bit more complex 35 00:01:39,850 --> 00:01:42,908 than this, of course, but for now, this is enough. 36 00:01:42,908 --> 00:01:45,380 Now, who actually does execute 37 00:01:45,380 --> 00:01:47,438 the code if not the browser? 38 00:01:47,438 --> 00:01:50,070 And that's where the V8 engine 39 00:01:50,070 --> 00:01:52,770 developed by Google comes into play. 40 00:01:52,770 --> 00:01:55,420 Because that is exactly where JavaScript code 41 00:01:55,420 --> 00:01:59,800 will be parsed and run in NodeJS, okay? 42 00:01:59,800 --> 00:02:02,819 So, I hope that now the definition of NodeJS 43 00:02:02,819 --> 00:02:07,116 being a JavaScript Runtime on the V8 JavaScript engine 44 00:02:07,116 --> 00:02:10,104 makes a lot more sense and again, 45 00:02:10,104 --> 00:02:12,742 this is just a very high level overview 46 00:02:12,742 --> 00:02:16,060 of what Node is and how it works. 47 00:02:16,060 --> 00:02:18,430 We are gonna go into a lot of detail 48 00:02:18,430 --> 00:02:20,926 about how Node really works behind the scenes 49 00:02:20,926 --> 00:02:23,860 right in the next section, but at this point, 50 00:02:23,860 --> 00:02:26,152 I just want you to get a quick overview 51 00:02:26,152 --> 00:02:28,810 so that you can start learning the fundamentals 52 00:02:28,810 --> 00:02:32,203 of NodeJS in practice throughout this section. 53 00:02:34,000 --> 00:02:36,230 Anyway, now that we have JavaScript 54 00:02:36,230 --> 00:02:38,400 outside of the browser in a kind of 55 00:02:38,400 --> 00:02:40,704 stand alone environment which just NodeJS, 56 00:02:40,704 --> 00:02:44,058 we can do so many more things with JavaScript 57 00:02:44,058 --> 00:02:46,690 that were completely impossible before 58 00:02:46,690 --> 00:02:48,254 like accessing the file system, 59 00:02:48,254 --> 00:02:50,515 or better networking capabilities 60 00:02:50,515 --> 00:02:53,054 are not possible with NodeJS 61 00:02:53,054 --> 00:02:55,630 and all these factors together give us 62 00:02:55,630 --> 00:02:59,750 the perfect conditions for using NodeJS as a web server 63 00:02:59,750 --> 00:03:02,327 meaning that now we can finally use JavaScript 64 00:03:02,327 --> 00:03:05,550 on the server side of web development 65 00:03:05,550 --> 00:03:08,020 in order to build fast, highly scalable 66 00:03:08,020 --> 00:03:10,810 network applications for powering the back-end 67 00:03:10,810 --> 00:03:13,540 all for websites or web applications. 68 00:03:13,540 --> 00:03:15,990 And this is absolutely fantastic 69 00:03:15,990 --> 00:03:19,030 and game-changing for web development. 70 00:03:19,030 --> 00:03:22,103 So, let's now take a look at some use cases for Node 71 00:03:22,103 --> 00:03:25,703 and why it's such a great fit for back-end development. 72 00:03:27,010 --> 00:03:29,430 And the first thing that we need to talk about 73 00:03:29,430 --> 00:03:31,060 is the fact that Node applications 74 00:03:31,060 --> 00:03:34,603 are so fast and so scalable because NodeJS 75 00:03:34,603 --> 00:03:36,705 is single threaded based on 76 00:03:36,705 --> 00:03:40,110 an event driven, non-blocking I/O model 77 00:03:40,110 --> 00:03:43,932 which makes NodeJS very lightweight and efficient. 78 00:03:43,932 --> 00:03:47,140 Now, that, of course, sounds super complicated, 79 00:03:47,140 --> 00:03:50,040 I know, but once more we're gonna talk about 80 00:03:50,040 --> 00:03:52,146 exactly what all of this means 81 00:03:52,146 --> 00:03:54,110 a little late in the course. 82 00:03:54,110 --> 00:03:56,250 But, for now, just keep in mind 83 00:03:56,250 --> 00:03:59,052 that Node is perfect for building super fast, 84 00:03:59,052 --> 00:04:02,910 and scalable data-intensive web applications. 85 00:04:02,910 --> 00:04:06,280 And that makes NodeJS a perfect fit for building 86 00:04:06,280 --> 00:04:08,580 all different kinds of applications like 87 00:04:08,580 --> 00:04:11,830 building an API with a database behind it 88 00:04:11,830 --> 00:04:16,830 and preferably a non-relational NoSQL database like MongoDB 89 00:04:17,090 --> 00:04:20,250 and this is actually exactly what we're gonna do later 90 00:04:20,250 --> 00:04:24,568 in this course as we dive deeper and deeper into NodeJS. 91 00:04:24,568 --> 00:04:27,350 But, there is, of course, all sorts of other apps 92 00:04:27,350 --> 00:04:30,007 that we can build like data streaming applications 93 00:04:30,007 --> 00:04:33,739 such as YouTube or Netflix, real-time chat apps, 94 00:04:33,739 --> 00:04:36,600 or even server-side web applications 95 00:04:36,600 --> 00:04:39,430 where the entire content is simply generated 96 00:04:39,430 --> 00:04:42,055 right on the server, so as you see, 97 00:04:42,055 --> 00:04:44,684 the possibilities really are endless. 98 00:04:44,684 --> 00:04:47,650 But, there is actually, also, a type of apps 99 00:04:47,650 --> 00:04:49,990 that we should not build with Node. 100 00:04:49,990 --> 00:04:51,890 And this is when our app needs 101 00:04:51,890 --> 00:04:54,380 some super heavy server-side processing 102 00:04:54,380 --> 00:04:57,750 like having image manipulations, video conversion, 103 00:04:57,750 --> 00:05:01,270 file compression or anything like that, all right. 104 00:05:01,270 --> 00:05:04,930 And you will learn why that is once we dive deeper 105 00:05:04,930 --> 00:05:07,410 into how Node actually works. 106 00:05:07,410 --> 00:05:09,500 So, in this case, we're better off 107 00:05:09,500 --> 00:05:14,010 using something like Ruby on Rails, PHP, or Python. 108 00:05:14,010 --> 00:05:16,460 Because NodeJS just wasn't developed 109 00:05:16,460 --> 00:05:19,910 for these use cases and although there are solutions 110 00:05:19,910 --> 00:05:22,480 for dealing with them, we should always use 111 00:05:22,480 --> 00:05:25,157 the right tool for the task at hand. 112 00:05:25,157 --> 00:05:28,361 Okay, so these are the types of applications 113 00:05:28,361 --> 00:05:31,977 that we can and cannot build using NodeJS. 114 00:05:31,977 --> 00:05:34,780 And if you choose to use Node, 115 00:05:34,780 --> 00:05:37,540 well, then you are in good company because 116 00:05:37,540 --> 00:05:41,206 many top companies like Netflix, Uber, PayPal, 117 00:05:41,206 --> 00:05:45,140 Ebay and many many more have already started using 118 00:05:45,140 --> 00:05:48,910 NodeJS which really proves that the technology 119 00:05:48,910 --> 00:05:52,850 is stable enough at this point to be used in production. 120 00:05:52,850 --> 00:05:56,125 Now, of course there are more reasons for using Node, 121 00:05:56,125 --> 00:05:59,040 and the biggest one is probably that using 122 00:05:59,040 --> 00:06:01,650 the same language across your entire stack 123 00:06:01,650 --> 00:06:03,758 both on the front-end and the back-end 124 00:06:03,758 --> 00:06:07,420 is a lot easier for you or for your team. 125 00:06:07,420 --> 00:06:09,010 First, you don't have to learn 126 00:06:09,010 --> 00:06:11,070 a new programming language for building 127 00:06:11,070 --> 00:06:13,580 your back-end and, also, you don't have to 128 00:06:13,580 --> 00:06:15,824 keep switching back and forth between language 129 00:06:15,824 --> 00:06:18,450 which will make the entire building process 130 00:06:18,450 --> 00:06:20,533 faster and more efficient. 131 00:06:20,533 --> 00:06:23,107 Believe me, it's really really amazing 132 00:06:23,107 --> 00:06:26,230 to be able to use JavaScript to build 133 00:06:26,230 --> 00:06:29,215 your entire application from start to finish. 134 00:06:29,215 --> 00:06:31,727 It's absolutely fantastic really. 135 00:06:31,727 --> 00:06:34,150 And another great reason for using Node 136 00:06:34,150 --> 00:06:38,502 is that there is a huge library of open-source packages 137 00:06:38,502 --> 00:06:41,450 or modules, as we can also call them, 138 00:06:41,450 --> 00:06:43,884 available for everyone for free. 139 00:06:43,884 --> 00:06:47,190 It's called NPM and you've probably heard of it 140 00:06:47,190 --> 00:06:48,976 or even used it already. 141 00:06:48,976 --> 00:06:51,170 And, of course, we're also gonna start 142 00:06:51,170 --> 00:06:53,563 using packages right in the section. 143 00:06:54,430 --> 00:06:56,920 And, finally, it's also good to know 144 00:06:56,920 --> 00:06:59,420 that there is a huge active community 145 00:06:59,420 --> 00:07:02,020 of Node developers out there that are constantly 146 00:07:02,020 --> 00:07:05,650 improving NodeJS and helping beginners like you. 147 00:07:05,650 --> 00:07:08,670 And, so you can really rely on the technology 148 00:07:08,670 --> 00:07:11,929 for all your projects in the years to come. 149 00:07:11,929 --> 00:07:15,343 Okay, so that was a very brief intro 150 00:07:15,343 --> 00:07:20,040 and overview of NodeJS and some of it's use cases. 151 00:07:20,040 --> 00:07:21,920 So, for the rest of this section, 152 00:07:21,920 --> 00:07:23,810 we will now use Node to create 153 00:07:23,810 --> 00:07:25,950 a very simple web server and build 154 00:07:25,950 --> 00:07:28,750 an extremely simple API, so that 155 00:07:28,750 --> 00:07:30,160 you can get familiar with 156 00:07:30,160 --> 00:07:32,763 the basic principles of Node development.