Notes on Codecademy "Learn Node.js"
I've taken most of Codecademy's HTML/CSS course catalog for front-end web development, ending with a series of very educational exercises created outside of Codecademy's learning environment. I think I'm pretty well set up to execute web browser client-side portions of my project ideas, but I also need to get some education on server-side coding before I can put all the pieces together. I've played with Node.js earlier, but I'm far from an expert. It should be helpful to get a more formalized introduction via Codecademy, starting with Learn Node.js.
This course recommends going through Introduction to JavaScript as a prerequisite, so the course assumes we already know those basics. The course does not place the same requirement on Intermediate JavaScript, so some of the relevant course material is pulled into this Node.js course. Section on Node modules were reruns for me, but here it's augmented with additional details and a pointer to official documentation.
The good news for the overlap portions is that it meant I already had partial credit for Learn Node.js as soon as I started, the bad news is the Codecademy's own back-end got a little confused. I clicked through "Next" for a quick review, and by doing so it skipped me over a few lessons that I had not yet seen. My first hint something was wrong was getting tossed into a progress checking quiz and being baffled: "I don't remember seeing this material before!" I went back to examine the course syllabus, where I saw the skipped portions. The quiz was much easier once I went through that material!
This course taught me about error-first callback functions, something that is apparently an old convention for asynchronous JavaScript (or just Node) code that I hadn't been aware of. I think I stumbled across this in my earlier experiments and struggled to use the effectively. Here I learn they were the conceptual predecessor to promises, which led to async/await which plays nice with promises. But what about even older error-first callback code? This is where util.promisify()
comes into the picture, so that everyone can work together. Recognizing what error-first callbacks are and knowing how to interoperate via util.promisify()
, should be very useful.
The course instructs us on how to install Node.js locally on our development computers, but I'm going to stick with using Docker containers. Doing so would be inconvenient if I wanted to rely on globally installed libraries, but I want to avoid global installations as much as possible anyway. NPM is perfectly happy to work at project scope and that just takes mapping my project directory as a volume into the Docker container.
After all, I did that as a Docker & Node test run with ESP32 Sawppy's web interface. But that brought in some NPM headaches: I was perpetually triggering GitHub dependabot warnings about security vulnerabilities in NPM modules I hadn't even realized I was using. Doing a straight "update to latest" did not resolve these issues, I eventually figured out it was because I had been using node-static to serve static pages in my projects. But the node-static package hadn't been updated in years and so it certainly wouldn't have picked up security fixes. Perhaps I could switch it to another static server NPM module like http-server, or get rid of that altogether and keep using nginx as sheer overkill static web server.
Before I decide, though, this Learn Node.js course ended with a few exercises building our own HTTP server using Node libraries. These were a little more challenging than typical Codecademy in-course exercises. One factor is that the instructions told us to do a lot of things with no way to incrementally test them as we go. We didn't fire it up the server to listen for traffic (server.listen()
) until the second-from-final step, and by then I had accumulated a lot of mistakes that took time to untangle from the rest of the code. The second factor is that the instructions were more vague than usual. Some Codecademy exercises tell us exactly what to type and on which line, and I think that didn't leave enough room for us to figure things out for ourselves and learn. This exercise would sometimes tell us "fill in the request header" without details or even which Node.js API to use. We had to figure it all out ourselves. I realize this is a delicate balance when writing course material. I feel Codecademy is usually too much "do exactly this" for my taste, but the final project of Learn Node.js might have gone too far in the "left us flailing uselessly" direction.
In the meantime, I believe I have enough of a start to continue learning about server-side JavaScript. My next step is to learn Express.