What is Express.js and Why Does It Matter?

In a world of monolithic Web frameworks, enterprise-level solutions, and deep toolkits for every language, defaulting to the largest hammer for even the smallest nails is easy. Enter Express.js, described on its website as a "fast, unopinionated, minimalist server-side Web framework for Node.js."

Written in JavaScript, Express acts only as a thin layer of core Web application features. Unlike a big, highly opinionated framework like Ruby on Rails, Express has no out-of-the-box object relational mapping or templating engine. Express isn't built around specific components, having "no opinion" regarding what technologies you plug into it. It strives to put control in the developer's hands and make Web application development for Node.js easier. This freedom, coupled with lightning fast setup and the pure JavaScript environment of Node, makes Express a strong candidate for quick development and rapid prototyping. Express is most popular with startups that want to build a product as quickly as possible and don't have very much legacy code.

Let's break down exactly how Express works. To understand Express, first you have to understand Node.js.

The Node.js environment is a key part of what makes Express so easy to build and deploy. Node can be thought of as a cross-platform JavaScript interpreter, able to run JavaScript free from the confines of the browser. In short, Node allows developers to write server-side code for Web apps and networking tools using JavaScript instead of another server-side language like PHP, Python, Java, etc. Using Node Package Manager, or npm, you can install libraries like Express to customize an existing Node installation to your needs. Node users have made thousands of these open-source libraries and server frameworks available. Check out this simple Web server:

var express = require('express');
var app = express();

app.get('/', function(req, res){
           res.send('<h1>Hello World!</h1>');


With just a couple lines of code and the Express library, you can build a simple server that will talk to browsers over localhost:8000.

By bringing JavaScript to the server side, Node benefits developers in two major ways. First and foremost, an all-JavaScript Web stack could cut development time significantly. According to Stack Overflow's 2017 Dev Survey, more Web developers use JavaScript than any other technology. It's growing too, especially with the popularity of front-end frameworks like React and Angular on the rise. When you write in JavaScript, you write a code base that more developers can understand. It is the world's most popular Web technology, so it has an endless stream of communities, support, and insight into its development. The ability to write both your front end and back end in a well-supported language means your dev team will be more productive and the final product gets done faster.

Secondly, developers benefit from JavaScript's nature as a non-blocking event-driven language. Think of the bulk of all Web traffic as events; JavaScript can handle all that concurrent traffic on a single thread by using an event loop. Essentially, JavaScript is extremely good at staying busy. When a request goes out for data from another source, instead of sitting motionless and waiting for the reply, JavaScript continues with its other tasks. JavaScript will stay ready to complete the action when the response arrives. All of this happens only on one processor thread, making Node less taxing on the server's hardware.

How does Express fit into all this? First and foremost, Express gives developers all the tooling they need to actually build HTTP servers. Node.js does very little out of the box. Node is an environment, it's just a foundation. Express is what gives you access to both incoming and outgoing Web traffic, but stops short of enforcing an object relational mapping, database, or templating engine.

This capability makes life easier for developers because it gives them freedom. Express isn't the only Node module in town, and you can get components for virtually any need. Instead of being locked into a particular style of templating, Express will work with Handlebar.js, Jade, ejs, and more. Just as easily (and perhaps of more interest to ProgrammableWeb's API provider-minded audience), you could completely exclude a templating component and turn your Express application into an API server, spitting out nothing but JavaScript Object Notation (JSON) data.

With data storage, you get this same freedom. Using a Node module called Mongoose, you can attach MongoDB to your Express app. You can plug Redis, SQL, Postgres — all the industry leading technologies — straight into your app with just a tiny layer of abstraction. Here, developers can make choices regarding what best works for their current application and avoid lengthy workarounds. For example, Django does not work with non-relational databases like MongoDB. Workarounds do exist, but usually lack official support, have limited functionality and a much higher cost in development time.

Developers can configure Express to the exact needs of their application, adding and removing components as necessary. You can build everything from static-content servers to RESTful APIs to full Model-View-Controller (MVC) frameworks built from scratch to lean lightweight microservices. The minimalism and un-opinionated nature of Express really comes to light here. It provides very little to a very rich environment, but what it does give is the basis of all Web traffic. Then, developers are free to integrate additional components and features as they need them.

Now, this isn't without its downsides. Minimalistic by nature, Express apps might make jumping between one team's app to the next difficult. With all the freedom in configuration and setup, the code base belong to one team could end up looking very different from the code base belonging to another. This also creates a new barrier for entry. It doesn't matter if a large framework enforces only a single flavor of database if that's the only kind of database a particular team knows. Express will still require developers well-versed JavaScript and Node who can pick up new technologies quickly.

In the end, every project is different and needs are constantly evolving. Because of this, Node.js and Express are especially useful to startups that have little legacy code in their products. These users want to build up as quickly as possible with a code base that's easily navigated and understood. Currently, enterprises such as Apple are still tentatively dipping their toes into the Node.js space. While not entirely common now, Express may still see larger enterprise adoption in the coming years. More recently, the framework has been used by IBM, Uber, Fox Sports, as well as a variety of tech startups.

Brendan Stanton As a Lead Instructor at the Coding Dojo, Brendan loves helping people pick up technology. Originally self-taught, he came to the Coding Dojo to immerse himself in an environment of learning while helping others take those first steps on their coding journey. Besides leading classes and refining course curriculum, Brendan is a huge proponent of the importance of algorithms and is a self-described JavaScript apologist. On the rare occasion he's away from technology and code, Brendan enjoy cooking for people who love food.