Node.js Web Development, 4th edition, coming soon

; Date: February 25, 2018

Tags: Node.JS

With the rapid advances in the Node.js platform, Packt Publishing (the publishers of Node.js Web Development) and I both felt a new edition was required. The 3rd edition published in mid-2016 updated the text to support Promises and some advanced techniques like deployment using Docker. Since then, async functions have emerged on the scene, and with Node.js 10.x we'll have ES6 modules available. I just submitted the first draft of all 12 chapters to the editors, meaning that the book is about a month from being finished.

The concept for this book is to each the Node.js/Express stack by focusing on the full life-cycle from developing basic features, to adding more features, to Mobile-first theming, to deploying on servers using Docker, to semi-real-time communications with (socket.io) Socket.IO, to testing both the API and the user interface (the latter using Puppeteer), and finally beefing up security using Helmet and other tools.

Some high points include:

Using async functions to mitigate Callback Hell A big problem faced by Node.js developers is Callback Hell, or the slippery slope leading to highly nested callback functions. Such code is fragile and tricky to develop, debug, and to ensure all errors are caught/handled. The ECMAScript/JavaScript committee (TC-39) has developed a new language feature - async functions - making it possible to write asynchronous code without messy callback boilerplate. Instead we get really nice clean code that's a joy to write and read. The book contains lots of examples of async functions.

Babel Transpiling Babel is a tool for rewriting (transpiling) JavaScript code so it can run on older JavaScript implementations. A few examples are given for using Babel. See What is Babel, and when should one use Babel?

REST service development While we develop front end applications displaying HTML5 and CSS and JavaScript to our users, there's a tendency to also develop REST-based back-end services. We discuss several rationales for developing REST back-end services, and show a couple methods for doing so.

Using several database providers Persisting data to a database is a key to almost every application we'd be writing. The Node.js world drivers for practically every database engine. We show using SQLite3, a light-weight no-setup-required SQL database, using the Sequelize ORM layer with both SQLite3 and MySQL, and finally using MongoDB.

Deployment using Docker The modern Internet is built on "cloud services" with application deployment in the hundreds of thousands of servers for especially popular applicatons. Docker has become extremely popular for simplifying DevOPS activities - that is, application deployment. We develop a multi-container deployment of four containers: a) the front end application code, b) its associated database server, c) a back-end user authentication service, and d) its associated database. We show developing that setup on the laptop, and deploying the setup to a cloud hosting provider.

Test infrastructure using Docker In the chapter on unit testing techniques, we modify the deployment Docker setup so we can create a similar test infrastructure. Test cases are then run inside the Docker test infrastructure.

Puppeteer for UI testing UI testing is extremely, and the Puppeteer tool is an exciting new way to automate UI testing. We go over its use.

Implementing HTTPS in Express with Let's Encrypt and a custom Docker image Security is extremely important, and we do go over several tools to improve Express application security. Especially important is supporting HTTPS everywhere for privacy, security, and authentication considerations. We show how to extend the Docker-based deployment to include a container with the Let's Encrypt tools to implement HTTPS support. You can also view Deploying an Express app with HTTPS support in Docker using Lets Encrypt SSL